|
281
|
Programación / Programación C/C++ / Lista simple eliminar nodo segun un valor
|
en: 15 Septiembre 2018, 06:13 am
|
Buenas no entiendo el comportamiento de este procedimiento y mas precisamente en el ciclo for typedef struct tnodo *pnodo;//Estructura de la lista typedef struct tnodo{ int dato; pnodo sig; }; pnodo quitar_nodo(pnodo &lista, int valor)//Metodo quitar nodo { pnodo borrado, i; if(lista==NULL){ borrado=NULL; } else{ if(lista->dato==valor){ borrado=lista; lista=borrado->sig; borrado->sig=NULL; } else{ for(i=lista;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig);//De aqui en adelante no lo tengo bien en claro, se como lo hace pero el codigo me es incomprensible if(i->sig!=NULL){ borrado=i->sig; i->sig=borrado->sig; borrado->sig=NULL; } else{ borrado=NULL; } } } return borrado; }
Alguien que me lo explique en cristiano por favor?
|
|
|
282
|
Programación / Programación C/C++ / Una pregunta acerca de mostrar listas circulares
|
en: 13 Septiembre 2018, 06:26 am
|
Hola a todos, si bien esta es una de las formas mas facil de mostrar por pantalla los datos de una lista circular, pero yo queria saber si esto se puede realizar con un ciclo for porque la verdad no lo se Aqui abajo les dejo el procedimiento de mostrar_lista(); void mostrar(tlista lista) { pnodo i=lista.inicio; if(lista.inicio!=NULL){ do{ cout << "Nodo: " << i->dato << endl; i=i->sig; }while(i!=lista.inicio); } else{ cout << "LISTA VACIA" << endl; } }
|
|
|
284
|
Programación / Programación C/C++ / Ciclos for en listas
|
en: 10 Septiembre 2018, 20:08 pm
|
Alguien podria explicarme que es lo que hacen estos ciclos en las siguientes listas? LISTAS SIMPLES for(i=lista;!=NULL;i=i->sig);
for(i=lista.inicio;i->sig!=NULL;i=i->sig); i->sig=nuevo;
for(i=lista.inicio;(i->sig)->sig!=lista.inicio;i=i->sig);
El ultimo es de una lista circular simple con dos punteros al inicio y al final
|
|
|
285
|
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
|
|
|
286
|
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".
|
|
|
287
|
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; } }
|
|
|
288
|
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); } }
|
|
|
289
|
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; } }
|
|
|
290
|
Programación / Programación C/C++ / Ayuda con recursividad
|
en: 2 Septiembre 2018, 00:07 am
|
Hola, necesito una ayuda , non puedo sumar los valores de una lista enlazada simple la cual tiene un apuntador de inicio, dejo al estructura y la funcion recursiva que logre hasta ahora typedef struct tnodo *pnodo; typedef struct tnodo{ int dato; pnodo sig; }; typedef struct tlista{ pnodo inicio; };
int sumar(tlista lista) { pnodo i; if(lista.inicio==NULL){ return 0; } else{ return lista.inicio->dato+sumar(i=i->sig); } }
|
|
|
|
|
|
|