|
591
|
Programación / Programación C/C++ / Invertir contenido de una lista enlazada simple con apuntadores
|
en: 3 Septiembre 2018, 23:37 pm
|
Bueno la verdad no se porrque no me realiza el cambio para poder asi invertir la lista con el metodo burbuja y otra cosilla, si hay alguna otra forma de invertir la lista sin acudir a otra y respetando que es lista simplemente enlazada con 2 apuntadores estaria muy agradecid #include <iostream> #include <stdlib.h> #include <string.h> using namespace std; typedef struct tnodo *pnodo; typedef struct tnodo{ char dato; pnodo sig; }; typedef struct tlista{ pnodo inicio; pnodo final; }; char matrix[4][4]={{'a','b','c','d'},{'e','f','g','h'},{'i','j','k','l'},{'m','n','o','p'}}; void inicia(tlista &lista); void agregar_final(tlista &lista, pnodo nuevo); void copiarContenido(tlista &lista); void invertirLista(tlista &lista); void mostrar(tlista lista); int main() { tlista milista; pnodo nuevonodo; int opcion, num; inicia(milista); do{ system("cls"); cout << "*MATRIZ*" << endl; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ cout << matrix[i][j] << " "; } cout << endl; } cout << "1. Iniciar lista" << endl; cout << "2. Copiar contenido de la matriz a la lista" << endl; cout << "3. Invertir el orden de la lista" << endl; cout << "4. Mostrar lista" << endl; cout << "5. Salir" << endl; cin >> opcion; switch(opcion){ case 1: inicia(milista); break; case 2: copiarContenido(milista); break; case 3: invertirLista(milista); 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; } 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 copiarContenido(tlista &lista) { pnodo nuevo; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ nuevo=new tnodo; if(nuevo!=NULL){ nuevo->dato=matrix[i][j]; nuevo->sig=NULL; } else{ cout << "MEMORIA INSUFICIENTE" << endl; } if(nuevo!=NULL){ agregar_final(lista,nuevo); } } } } void invertirLista(tlista &lista) { pnodo i, j; char buscado, aux; bool ordenado=true; buscado=lista.inicio->dato; while(ordenado){ if(lista.inicio->dato==buscado){ ordenado=false; } else{ for(i=lista.inicio;i->sig!=NULL;i=i->sig){ j=i->sig; aux=i->dato; i->dato=j->dato; j->dato=aux; } } } } void mostrar(tlista lista) { pnodo i; if(lista.inicio!=NULL){ for(i=lista.inicio;i!=NULL;i=i->sig){ cout << "Nodo: " << i->dato << endl; } cout << endl; } else{ cout << "LISTA VACIA" << endl; } }
Y una ultiam cosilla, debo hacer otro modulo donde debo liberar el espacio de memoria de todos los nodos , al pareceer debo hacerlo nodo por nodo o liberar todo el espacio en memoria ocupado por la lista completea si alguien sabe
|
|
|
592
|
Programación / Programación C/C++ / Pequeña duda sobre listas circulares simples
|
en: 3 Septiembre 2018, 21:26 pm
|
Hola chavales, queria que me dijeran que estoy haciendo mal en este programa, deseo eliminar el ultimo nodo de la lsita circular y creo, creo que mi error esta en no declarar bien los apuntadores de inicio y final de la lista y el metodo de borrar ultimo nodo tambien me falla al parecer #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 #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? #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".
|
|
|
593
|
Programación / Programación C/C++ / Re: Ayuda con listas
|
en: 3 Septiembre 2018, 11:27 am
|
Ahhh tenes razon, la solucion seria esta pnodo quitar_final(tlista &lista) //ERROR { 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!=NULL;i=i->sig); borrado=lista.final; lista.final=i; lista.final->sig=NULL; } } return borrado; }
Me faltaria el quitar nodo segun un valor especifico
|
|
|
594
|
Programación / Programación C/C++ / Re: Modificacion del orden de una lista simplemente enlazada
|
en: 3 Septiembre 2018, 01:57 am
|
Use un bubble_sort sobre la lista fue mas facil void modificar_lista(pnodo &lista) { pnodo i, j; tcad buscado, aux; bool ordenado=true; cout << "Ingrese dia de la semana: "; cin >> buscado; while(ordenado){ if(strcmp(lista->dato,buscado)==0){ ordenado=false; } else{ for(i=lista;i->sig!=NULL;i=i->sig){ j=i->sig; strcpy(aux,i->dato); strcpy(i->dato,j->dato); strcpy(j->dato,aux); } } } }
|
|
|
595
|
Programación / Programación C/C++ / Ayuda con listas
|
en: 3 Septiembre 2018, 01:56 am
|
Hola nuevamente, tengo 2 fallos en las funciones quitar_final() y quitar_nodo(); No se cual sea el problema algo debo estar haciendo mal o sera el sueño no se Aqui os dejo el codigo completo #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 inicia(tlista &lista); void crear(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 valor); bool buscar_nodo(tlista lista,int valor); 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. Agregar al final" << endl; cout << "4. Agregar en orden" << endl; cout << "5. Quitar al inicio" << endl; cout << "6. Quitar al final" << endl; cout << "7. Quitar valor" << endl; cout << "8. Buscar valor" << endl; cout << "9. Mostrar lista" << endl; cout << "10. 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: crear(nuevonodo); if(nuevonodo!=NULL){agregar_final(milista,nuevonodo);}; break; case 4: crear(nuevonodo); if(nuevonodo!=NULL){agregar_orden(milista,nuevonodo);}; break; case 5: eliminado=quitar_inicio(milista); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);} else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 6: eliminado=quitar_final(milista); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);} else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 7: cout << "Igrese valor a eliminar: "; cin >> num; eliminado=quitar_nodo(milista,num); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);} else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 8: cout << "Ingrese valor buscado: "; cin >> num; if(buscar_nodo(milista,num)==true){cout << "VALOR ENCONTRADO" << endl;} else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break; case 9: cout << "*** LISTA ***" << endl; mostrar(milista); break; case 10: cout << "FIN DEL PROGRAMA" << endl; break; default: cout << "Opcion incorrecta" << endl; } system("pause"); }while(opcion!=10); } void inicia(tlista &lista) { lista.inicio=NULL; lista.final=NULL; } 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; } } 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) //ERROR { 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!=NULL;i=i->sig); borrado=lista.final; lista.final->sig=NULL; } } return borrado; } pnodo quitar_nodo(tlista &lista, int valor) //ERROR { pnodo borrado, i; if(lista.inicio==NULL){ borrado=NULL; } else{ if(lista.inicio->dato==valor){ borrado=lista.inicio; if(lista.inicio==lista.final){ lista.inicio=NULL; lista.final=NULL; } else{ lista.inicio=NULL; borrado->sig=NULL; } } else{ for(i=lista.inicio;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig); if(i->sig!=NULL){ borrado=NULL; } else{ borrado=i->sig; borrado->sig=NULL; } } } return borrado; } bool buscar_nodo(tlista lista,int valor) { pnodo i; bool encontrado=false; if(lista.inicio!=NULL){ for(i=lista.inicio;i!=NULL && encontrado==false;i=i->sig){ if(i->dato==valor){ encontrado=true; } } } return encontrado; } void mostrar(tlista lista) { pnodo i; if(lista.inicio!=NULL){ for(i=lista.inicio;i!=NULL;i=i->sig){ cout << "Nodo: " << i->dato << endl; } cout << endl; } else{ cout << "LISTA VACIA" << endl; } }
|
|
|
596
|
Programación / Programación C/C++ / Pequeña duda sobre recursion
|
en: 3 Septiembre 2018, 00:33 am
|
Hola chavales tengo una pequeña duda acerca de este fragmento de codigo que a mi parecer lo que hace es verificar si la lista esta vacia, caso contrario me devuelve la posicion en memoria del ultimo elemento de la lsita o me equivoco?? pnodo desconocido(pnodo lista) { if(lista==NULL || lista->sig==NULL){ return lista; } else{ return desconocido(lista->sig); } }
|
|
|
597
|
Programación / Programación C/C++ / Re: Proyecto final C++
|
en: 2 Septiembre 2018, 22:39 pm
|
Puedes usar el tda fecha y algun calculo para realizar el calculo exacto de la edad de una persona TDA FECHA #include <iostream> #include <math.h> using namespace std; const int MAX=3; typedef int t_fecha[MAX]; void crear_fecha(t_fecha &n); bool VALIDAR(t_fecha n); void mostrar_fecha(t_fecha n); void comparar_fechas(t_fecha n, t_fecha m); void mayor_fechas(t_fecha n, t_fecha m); int main() { t_fecha a, b; crear_fecha(a); crear_fecha(b); comparar_fechas(a, b); mayor_fechas(a, b); system("pause"); return 0; } void crear_fecha(t_fecha &n) { do{ cout << "Ingrese dia: "; cin >> n[0]; cout << "Ingrese mes: "; cin >> n[1]; cout << "Inrese año : "; cin >> n[2]; }while(VALIDAR(n)==false); mostrar_fecha(n); } bool VALIDAR(t_fecha n) { if(n[1]>=1 && n[1]<=12){ switch(n[1]){ case 1: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break; case 2: if(n[2]%4==0){ if(n[0]>0 && n[0]<30){return true;}else{return false;} } else{ if(n[0]>0 && n[0]<29){return true;}else{return false;} }; break; case 3: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break; case 4: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break; case 5: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break; case 6: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break; case 7: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break; case 8: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break; case 9: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break; case 10: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break; case 11: if(n[0]>0 && n[0]<31){return true;}else{return false;}; break; case 12: if(n[0]>0 && n[0]<32){return true;}else{return false;}; break; default: return false; } } else{ return false; } } void mostrar_fecha(t_fecha n) { cout << n[0] << "/" << n[1] << "/" << n[2] << endl; } void comparar_fechas(t_fecha n, t_fecha m) { if(n[0]==m[0] && n[1]==m[1] && n[2]==m[2]){ cout << "Las fechas son iguales" << endl; } else{ cout << "Las fechas son diferentes" << endl; } } void mayor_fechas(t_fecha n, t_fecha m) { if(n[2]>m[2]){ cout << "Es mayor "; mostrar_fecha(n); } else{ if(n[2]<m[2]){ cout << "Es mayor "; mostrar_fecha(m); } else{ if(n[1]>m[1]){ cout << "Es mayor "; mostrar_fecha(n); } else{ if(n[1]<m[1]){ cout << "Es mayor "; mostrar_fecha(m); } else{ if(n[0]>m[0]){ cout << "Es mayor "; mostrar_fecha(n); } else{ if(n[0]<m[0]){ cout << "Es mayor "; mostrar_fecha(m); } else{ cout << "Son iguales" << endl; } } } } } } }
CALCULO EDAD [int d, m ,a, edad; cout << "8/8/2014 << endl; cout << "COLOQUE FECHA DE NACIMIENTO EN FORMATO DD/MM/AAAA:" << endl; cin >> d >> m >> a; edad=2014-a; if(m==8){ if(d<8){ edad++; } else{ if(d>8){ edad--; } } } else{ if(m<8){ edad++; } else{ edad--; } }
|
|
|
600
|
Programación / Programación C/C++ / Modificacion del orden de una lista simplemente enlazada
|
en: 2 Septiembre 2018, 16:57 pm
|
Hola, queria saber como puedo alterar el orden de una lista enlazada simple me piden lo siguiente, sin utilizar listas auxiliares, hacer una operacion donde los nodos se modifiquen segun espefica el usuario LISTA ORIGINAL: LUNES->MARTES->MIERCOLES->JUEVES->VIERNES->SABADO->DOMINGO Dia especificado por el usuario: JUEVES LISTA MODIFICADA: JUEVES->VIERNES->SABADO->DOMINGO->LUNES->MARTES->MIERCOLES He intentado ir agregando al final de la lista original los datos que son diferentes al dato especificado por el usuario y borrando el elemento inicial de la lista pero no tuve exito aca dejo el programa solo fijense en el modulo que se llama void modificar_lista(pnodo &lista) #include <iostream> #include <stdlib.h> #include <string.h> using namespace std; typedef char tcad[16]; typedef struct tnodo *pnodo; typedef struct tnodo{ tcad dato; pnodo sig; }; void inicia(pnodo &lista); void crear(pnodo &nuevo); void agregar_final(pnodo &lista, pnodo nuevo); pnodo quitar_inicio(pnodo &lista); void modificar_lista(pnodo &lista); void mostrar(pnodo lista); int main() { pnodo milista, nodo; int opcion; inicia(milista); do{ system("cls"); cout << "1. Iniciar lista" << endl; cout << "2. Agregar elementos a la lista" << endl; cout << "3. Modificar lista" << endl; cout << "4. Mostrar lista" << endl; cout << "5. Salir" << endl; cin >> opcion; switch(opcion){ case 1: inicia(milista); break; case 2: crear(nodo); if(nodo!=NULL){agregar_final(milista,nodo);}; break; case 3: modificar_lista(milista); 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(pnodo &lista) { lista=NULL; } void crear(pnodo &nuevo) { nuevo=new tnodo; if(nuevo!=NULL){ cout << "Ingrese dato: "; cin >> nuevo->dato; nuevo->sig=NULL; } else{ cout << "MEMORIA INSUFICIENTE" << endl; } } 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; } } pnodo quitar_inicio(pnodo &lista) { pnodo borrado; if(lista==NULL){ borrado=NULL; } else{ borrado=lista; lista=lista->sig; borrado->sig=NULL; } return borrado; } void modificar_lista(pnodo &lista) { pnodo i; tcad buscado; cout << "Ingrese dia de la semana: "; cin >> buscado; for(i=lista;i!=NULL;i=i->sig){ if(strcmp(i->dato,buscado)!=0){ agregar_final(lista,i); delete(quitar_inicio(lista)); } else{ break; } } } void mostrar(pnodo lista) { pnodo i; if(lista!=NULL){ for(i=lista;i!=NULL;i=i->sig){ cout << "Nodo: " << i->dato << endl; } cout << endl; } else{ cout << "LISTA VACIA" << endl; } }
|
|
|
|
|
|
|