Código
#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; int contador; }; void inicia(tlista &lista); void crear(pnodo &nuevo); void agregar_inicio(tlista &lista, pnodo nuevo); pnodo quitar_final(tlista &lista); void mostrar(tlista lista); int main() { tlista milista; pnodo nuevonodo, eliminado; int opcion, num; inicia(milista); do{ system("cls"); cout << "1. Iniciar lista" << endl; cout << "2. Agregar al inicio" << endl; cout << "3. Quitar al final" << endl; cout << "4. Mostrar lista" << endl; cout << "5. Salir" << endl; cin >> opcion; switch(opcion){ case 1: inicia(milista); break; case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break; case 3: eliminado=quitar_final(milista); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;}break; case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break; case 5: cout << "FIN DEL PROGRAMA" << endl; break; default: cout << "Opcion incorrecta" << endl; } system("pause"); }while(opcion!=5); } void inicia(tlista &lista) { lista.inicio=NULL; lista.final=NULL; lista.contador=0; } void crear(pnodo &nuevo) { nuevo=new tnodo; if(nuevo!=NULL){ cout << "Ingrese valor: "; 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; } lista.contador++; } pnodo quitar_final(tlista &lista) { pnodo borrado, i; 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!=lista.final->sig;i=i->sig) borrado=lista.final; lista.final=i; lista.final->sig=lista.inicio; } lista.contador--; } return borrado; } void mostrar(tlista lista) { pnodo i; if(lista.inicio!=NULL){ for(i=lista.inicio;i!=lista.final->sig;i=i->sig){ cout << "Nodo: " << i->dato << endl; } cout << endl; cout << "Cantidad de elementos: " << lista.contador << endl; } else{ cout << "LISTA VACIA" << endl; } }
Me he quemado la cabeza tratando de eliminar el ultimo elemento de la lista circular la logica la tengo pero no se como programarlo
Y al mostrar lista queria hacerlo con un for pero tampoco pude asi que use un do{}while(); Si alguien sabe codificacion en C++ me dice como es la cosa con borrar ultimo elemento de la lista circular , no hace falta que me explique de logica, muchas gracias
Código
#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; int contador; }; void inicia(tlista &lista); void crear(pnodo &nuevo); void agregar_inicio(tlista &lista, pnodo nuevo); pnodo quitar_final(tlista &lista); void mostrar(tlista lista); int main() { tlista milista; pnodo nuevonodo, eliminado; int opcion, num; inicia(milista); do{ system("cls"); cout << "1. Iniciar lista" << endl; cout << "2. Agregar al inicio" << endl; cout << "3. Quitar al final" << endl; cout << "4. Mostrar lista" << endl; cout << "5. Salir" << endl; cin >> opcion; switch(opcion){ case 1: inicia(milista); break; case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break; case 3: eliminado=quitar_final(milista);if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}; break; case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break; case 5: cout << "FIN DEL PROGRAMA" << endl; break; default: cout << "Opcion incorrecta" << endl; } system("pause"); }while(opcion!=5); } void inicia(tlista &lista) { lista.inicio=NULL; lista.final=NULL; lista.contador=0; } void crear(pnodo &nuevo) { nuevo=new tnodo; if(nuevo!=NULL){ cout << "Ingrese valor: "; 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; lista.final->sig=lista.inicio; } else{ lista.final->sig=nuevo; nuevo->sig=lista.inicio; lista.inicio=nuevo; } lista.contador++; } pnodo quitar_final(tlista &lista) { pnodo borrado, i; 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!=lista.final;i=i->sig); borrado=lista.final; i->sig=lista.inicio; lista.final=i; } lista.contador--; } return borrado; } void mostrar(tlista lista) { pnodo i; bool seguir=true; if(lista.inicio!=NULL){ i=lista.inicio; while(seguir){ cout << "Nodo: " << i->dato << endl; if(i==lista.final){ seguir=false; } i=i->sig; } } else{ cout << "LISTA VACIA" << endl; } }
Chicos lo acabo de resolver miren, porque nadie me lo dijo antes?
Código
#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; int contador; }; void inicia(tlista &lista); void crear(pnodo &nuevo); void agregar_inicio(tlista &lista, pnodo nuevo); pnodo quitar_final(tlista &lista); void mostrar(tlista lista); int main() { tlista milista; pnodo nuevonodo, eliminado; int opcion, num; inicia(milista); do{ system("cls"); cout << "1. Iniciar lista" << endl; cout << "2. Agregar al inicio" << endl; cout << "3. Quitar al final" << endl; cout << "4. Mostrar lista" << endl; cout << "5. Salir" << endl; cin >> opcion; switch(opcion){ case 1: inicia(milista); break; case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break; case 3: eliminado=quitar_final(milista);if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}; break; case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break; case 5: cout << "FIN DEL PROGRAMA" << endl; break; default: cout << "Opcion incorrecta" << endl; } system("pause"); }while(opcion!=5); } void inicia(tlista &lista) { lista.inicio=NULL; lista.final=NULL; lista.contador=0; } void crear(pnodo &nuevo) { nuevo=new tnodo; if(nuevo!=NULL){ cout << "Ingrese valor: "; 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; nuevo->sig=nuevo;//Hasta aca se que esta bien; } else{ lista.final->sig=nuevo; nuevo->sig=lista.inicio; lista.inicio=nuevo; } lista.contador++; } pnodo quitar_final(tlista &lista) { pnodo borrado, i; 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!=lista.inicio;i=i->sig); borrado=lista.final; lista.final=i; lista.final->sig=lista.inicio; } lista.contador--; } return borrado; } void mostrar(tlista lista) { pnodo i; bool seguir=true; if(lista.inicio!=NULL){ i=lista.inicio; while(seguir){ cout << "Nodo: " << i->dato << endl; if(i==lista.final){ seguir=false; } i=i->sig; } } else{ cout << "LISTA VACIA" << endl; } }
Mod: Prohibido el doble o triple post. Usa el botón "Modificar".