//Lista simple con un puntero
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;//Aca tambien puede ir un tipo de dato estructurado
pnodo sig;
};
void iniciar_lista(pnodo &lista);
void crear_nodo(pnodo &nuevo);
void agregar_inicio(pnodo &lista, pnodo nuevo);
void agregar_final(pnodo &lista, pnodo nuevo);
void agregar_orden(pnodo &lista, pnodo nuevo);
pnodo quitar_inicio(pnodo &lista);
pnodo quitar_final(pnodo &lista);
pnodo quitar_nodo(pnodo &lista, int buscado);
bool buscar_nodo(pnodo lista, int buscado);
void mostrar_lista(pnodo lista);
int main()
{
int opcion, buscado;
pnodo milista, nuevo, eliminado;
iniciar_lista(milista);
do{
system("cls");
cout<<"1. Agregar al inicio"<<endl;
cout<<"2. Agregar al final"<<endl;
cout<<"3. Agregar en orden"<<endl;
cout<<"4. Quitar inicio"<<endl;
cout<<"5. Quitar final"<<endl;
cout<<"6. Quitar nodo"<<endl;
cout<<"7. Buscar nodo"<<endl;
cout<<"8. Mostrar lista"<<endl;
cout<<"9. Salir"<<endl;
cin>>opcion;
switch(opcion){
case 1: crear_nodo(nuevo);
if(nuevo!=NULL)
agregar_inicio(milista,nuevo);
break;
case 2: crear_nodo(nuevo);
if(nuevo!=NULL)
agregar_final(milista,nuevo);
break;
case 3: crear_nodo(nuevo);
if(nuevo!=NULL)
agregar_orden(milista,nuevo);
break;
case 4: eliminado=quitar_inicio(milista);
if(eliminado!=NULL){
cout<<"Eliminado: "<<eliminado->dato<<endl;
delete(eliminado);
}
else
cout<<"NO SE PUEDE ELIMINAR, LISTA VACIA"<<endl;
break;
case 5: eliminado=quitar_final(milista);
if(eliminado!=NULL){
cout<<"Eliminado: "<<eliminado->dato<<endl;
delete(eliminado);
}
else
cout<<"NO SE PUEDE ELIMINAR, LISTA VACIA"<<endl;
break;
case 6: cout<<"Ingrese valor buscado: ";
cin>>buscado;
eliminado=quitar_nodo(milista,buscado);
if(eliminado!=NULL){
cout<<"Eliminado: "<<eliminado->dato<<endl;
delete(eliminado);
}
else
cout<<"NO SE PUDO ELIMINAR, VALOR NO ENCONTRADO"<<endl;
break;
case 7: cout<<"Ingrese valor buscado: ";
cin>>buscado;
if(buscar_nodo(milista,buscado)==true)
cout<<"Encontrado"<<endl;
else
cout<<"VALOR NO ENCONTRADO"<<endl;
break;
case 8: mostrar_lista(milista);break;
case 9: cout<<"FIN DEL PROGRAMA"<<endl;break;
default: cout<<"Opcion incorrecta"<<endl;
}
system("pause");
}while(opcion!=9);
return 0;
}
void iniciar_lista(pnodo &lista)
{
lista=NULL;
}
void crear_nodo(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout<<"Ingrese dato: ";
cin>>nuevo->dato;
nuevo->sig=NULL;
}
else
cout<<"MEMORIA INSUFICIENTE"<<endl;
}
void agregar_inicio(pnodo &lista, pnodo nuevo)
{
if(lista==NULL)
lista=nuevo;
else{
nuevo->sig=lista;
lista=nuevo;
}
}
void agregar_final(pnodo &lista, pnodo nuevo)
{
pnodo i;
if(lista==NULL)
lista=nuevo;
else{
for(i=lista;i->sig!=NULL;i=i->sig);
i->sig=nuevo;
}
}
void agregar_orden(pnodo &lista, pnodo nuevo)
{
pnodo i;
if(lista==NULL)
lista=nuevo;
else{
if(nuevo->dato<lista->dato){
nuevo->sig=lista;
lista=nuevo;
}
else{
for(i=lista;i->sig!=NULL && nuevo->dato>(i->sig)->dato;i=i->sig);
nuevo->sig=i->sig;
i->sig=nuevo;
}
}
}
pnodo quitar_inicio(pnodo &lista)
{
pnodo borrado;
if(lista==NULL)
borrado=NULL;
else{
borrado=lista;
lista=borrado->sig;
borrado->sig=NULL;
}
return borrado;
}
pnodo quitar_final(pnodo &lista)
{
pnodo i, borrado;
if(lista==NULL)
borrado=NULL;
else{
if(lista->sig==NULL){
borrado=lista;
lista=NULL;
}
else{
for(i=lista;(i->sig)->sig!=NULL;i=i->sig);
borrado=i->sig;
i->sig=NULL;
}
}
return borrado;
}
pnodo quitar_nodo(pnodo &lista, int buscado)
{
pnodo i, borrado;
if(lista==NULL)
borrado=NULL;
else{
if(buscado==lista->dato){
borrado=lista;
lista=borrado->sig;
borrado->sig=NULL;
}
else{
for(i=lista;i->sig!=NULL && buscado!=(i->sig)->dato;i=i->sig);
if(i->sig!=NULL){
borrado=i->sig;
i->sig=borrado->sig;
borrado->sig=NULL;
}
else
borrado=NULL;
}
}
return borrado;
}
bool buscar_nodo(pnodo lista, int buscado)
{
pnodo i;
bool encontrado=false;
if(lista!=NULL){
for(i=lista;i!=NULL && encontrado==false;i=i->sig)
if(buscado==i->dato)
encontrado=true;
}
return encontrado;
}
void mostrar_lista(pnodo lista)
{
pnodo i;
if(lista!=NULL){
for(i=lista;i!=NULL;i=i->sig)
cout<<i->dato<<"->";
cout<<"NULL"<<endl;
}
else
cout<<"LISTA VACIA"<<endl;
}
//Lista simple con 2 punteros
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo final;
};
void iniciar_lista(tlista &lista);
void crear_nodo(pnodo &nuevo);
void agregar_inicio(tlista &lista, pnodo nuevo);
void agregar_final(tlista &lista, pnodo nuevo);
void agregar_orden(tlista &lista, pnodo nuevo);
pnodo quitar_inicio(tlista &lista);
pnodo quitar_final(tlista &lista);
pnodo quitar_nodo(tlista &lista, int buscado);
bool buscar_nodo(tlista lista, int buscado);
void mostrar_lista(tlista lista);
int main()
{
int opcion, buscado;
tlista milista;
pnodo nuevo, eliminado;
iniciar_lista(milista);
do{
system("cls");
cout<<"1. Agregar al inicio"<<endl;
cout<<"2. Agregar al final"<<endl;
cout<<"3. Agregar en orden"<<endl;
cout<<"4. Quitar inicio"<<endl;
cout<<"5. Quitar final"<<endl;
cout<<"6. Quitar nodo"<<endl;
cout<<"7. Buscar nodo"<<endl;
cout<<"8. Mostrar lista"<<endl;
cout<<"9. Salir"<<endl;
cin>>opcion;
switch(opcion){
case 1: crear_nodo(nuevo);
if(nuevo!=NULL)
agregar_inicio(milista,nuevo);
break;
case 2: crear_nodo(nuevo);
if(nuevo!=NULL)
agregar_final(milista,nuevo);
break;
case 3: crear_nodo(nuevo);
if(nuevo!=NULL)
agregar_orden(milista,nuevo);
break;
case 4: eliminado=quitar_inicio(milista);
if(eliminado!=NULL){
cout<<"Eliminado: "<<eliminado->dato<<endl;
delete(eliminado);
}
else
cout<<"NO SE PUEDE ELIMINAR, LISTA VACIA"<<endl;
break;
case 5: eliminado=quitar_final(milista);
if(eliminado!=NULL){
cout<<"Eliminado: "<<eliminado->dato<<endl;
delete(eliminado);
}
else
cout<<"NO SE PUEDE ELIMINAR, LISTA VACIA"<<endl;
break;
case 6: cout<<"Ingrese valor buscado: ";
cin>>buscado;
eliminado=quitar_nodo(milista,buscado);
if(eliminado!=NULL){
cout<<"Eliminado: "<<eliminado->dato<<endl;
delete(eliminado);
}
else
cout<<"NO SE PUDO ELIMINAR, VALOR NO ENCONTRADO"<<endl;
break;
case 7: cout<<"Ingrese valor buscado: ";
cin>>buscado;
if(buscar_nodo(milista,buscado)==true)
cout<<"Encontrado"<<endl;
else
cout<<"VALOR NO ENCONTRADO"<<endl;
break;
case 8: mostrar_lista(milista);break;
case 9: cout<<"FIN DEL PROGRAMA"<<endl;break;
default: cout<<"Opcion incorrecta"<<endl;
}
system("pause");
}while(opcion!=9);
return 0;
}
void iniciar_lista(tlista &lista)
{
lista.inicio=NULL;
lista.final=NULL;
}
void crear_nodo(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout<<"Ingrese dato: ";
cin>>nuevo->dato;
nuevo->sig=NULL;
}
else
cout<<"MEMORIA INSUFICIENTE"<<endl;
}
void agregar_inicio(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
}
void agregar_final(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
lista.final->sig=nuevo;
lista.final=nuevo;
}
}
void agregar_orden(tlista &lista, pnodo nuevo)
{
pnodo i;
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
if(nuevo->dato<lista.inicio->dato){
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
else{
if(nuevo->dato>lista.final->dato){
lista.final->sig=nuevo;
lista.final=nuevo;
}
else{
for(i=lista.inicio;i->sig!=NULL && nuevo->dato>(i->sig)->dato;i=i->sig);
nuevo->sig=i->sig;
i->sig=nuevo;
}
}
}
}
pnodo quitar_inicio(tlista &lista)
{
pnodo borrado;
if(lista.inicio==NULL)
borrado=NULL;
else{
if(lista.inicio==lista.final){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else{
borrado=lista.inicio;
lista.inicio=borrado->sig;
borrado->sig=NULL;
}
}
return borrado;
}
pnodo quitar_final(tlista &lista)
{
pnodo i, borrado;
if(lista.inicio==NULL)
borrado=NULL;
else{
if(lista.inicio==lista.final){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else{
for(i=lista.inicio;(i->sig)->sig!=NULL;i=i->sig);
borrado=lista.final;
lista.final=i;
lista.final->sig=NULL;
}
}
return borrado;
}
pnodo quitar_nodo(tlista &lista, int buscado)
{
pnodo i, borrado;
if(lista.inicio==NULL)
borrado=NULL;
else{
if(lista.inicio==lista.final){
if(buscado==lista.inicio->dato){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else
borrado=NULL;
}
else{
if(buscado==lista.inicio->dato)
borrado=quitar_inicio(lista);
else{
if(buscado==lista.final->dato)
borrado=quitar_final(lista);
else{
for(i=lista.inicio;i->sig!=NULL && buscado!=(i->sig)->dato;i=i->sig);
if(i->sig!=NULL){
borrado=i->sig;
i->sig=borrado->sig;
borrado->sig=NULL;
}
else
borrado=NULL;
}
}
}
}
return borrado;
}
bool buscar_nodo(tlista lista, int buscado)
{
pnodo i;
bool encontrado=false;
if(lista.inicio!=NULL){
for(i=lista.inicio;i!=NULL && encontrado==false;i=i->sig)
if(buscado==i->dato)
encontrado=true;
}
return encontrado;
}
void mostrar_lista(tlista lista)
{
pnodo i;
if(lista.inicio!=NULL){
for(i=lista.inicio;i!=NULL;i=i->sig)
cout<<i->dato<<"->";
cout<<"NULL"<<endl;
}
else
cout<<"LISTA VACIA"<<endl;
}
Hay mas listas, simple circular, doble con 1 puntero, doble con 2 punteros, circular doble y otras que no recuerdo