elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Invertir contenido de una lista enlazada simple con apuntadores
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Invertir contenido de una lista enlazada simple con apuntadores  (Leído 6,682 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
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

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. typedef struct tnodo *pnodo;
  8. typedef struct tnodo{
  9. char dato;
  10. pnodo sig;
  11. };
  12. typedef struct tlista{
  13. pnodo inicio;
  14. pnodo final;
  15. };
  16. char matrix[4][4]={{'a','b','c','d'},{'e','f','g','h'},{'i','j','k','l'},{'m','n','o','p'}};
  17.  
  18. void inicia(tlista &lista);
  19. void agregar_final(tlista &lista, pnodo nuevo);
  20. void copiarContenido(tlista &lista);
  21. void invertirLista(tlista &lista);
  22. void mostrar(tlista lista);
  23.  
  24. int main()
  25. {
  26. tlista milista;
  27. pnodo nuevonodo;
  28. int opcion, num;
  29. inicia(milista);
  30. do{
  31. system("cls");
  32. cout << "*MATRIZ*" << endl;
  33. for(int i=0;i<4;i++){
  34. for(int j=0;j<4;j++){
  35. cout << matrix[i][j] << " ";
  36. }
  37. cout << endl;
  38. }
  39. cout << "1. Iniciar lista" << endl;
  40. cout << "2. Copiar contenido de la matriz a la lista" << endl;
  41. cout << "3. Invertir el orden de la lista" << endl;
  42. cout << "4. Mostrar lista" << endl;
  43. cout << "5. Salir" << endl;
  44. cin >> opcion;
  45. switch(opcion){
  46. case 1: inicia(milista); break;
  47. case 2: copiarContenido(milista); break;
  48. case 3: invertirLista(milista); break;
  49. case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
  50. case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
  51. default: cout << "Opcion incorrecta" << endl;
  52. }
  53. system("pause");
  54. }while(opcion!=5);
  55. }
  56.  
  57. void inicia(tlista &lista)
  58. {
  59. lista.inicio=NULL;
  60. lista.final=NULL;
  61.  
  62. }
  63.  
  64. void agregar_final(tlista &lista, pnodo nuevo)
  65. {
  66. if(lista.inicio==NULL){
  67. lista.inicio=nuevo;
  68. lista.final=nuevo;
  69. }
  70. else{
  71. lista.final->sig=nuevo;
  72. lista.final=nuevo;
  73. }
  74. }
  75.  
  76. void copiarContenido(tlista &lista)
  77. {
  78. pnodo nuevo;
  79. for(int i=0;i<4;i++){
  80. for(int j=0;j<4;j++){
  81. nuevo=new tnodo;
  82. if(nuevo!=NULL){
  83. nuevo->dato=matrix[i][j];
  84. nuevo->sig=NULL;
  85. }
  86. else{
  87. cout << "MEMORIA INSUFICIENTE" << endl;
  88. }
  89. if(nuevo!=NULL){
  90. agregar_final(lista,nuevo);
  91. }
  92. }
  93. }
  94. }
  95.  
  96. void invertirLista(tlista &lista)
  97. {
  98. pnodo i, j;
  99. char buscado, aux;
  100. bool ordenado=true;
  101. buscado=lista.inicio->dato;
  102. while(ordenado){
  103. if(lista.inicio->dato==buscado){
  104. ordenado=false;
  105. }
  106. else{
  107. for(i=lista.inicio;i->sig!=NULL;i=i->sig){
  108. j=i->sig;
  109. aux=i->dato;
  110. i->dato=j->dato;
  111. j->dato=aux;
  112. }
  113. }
  114. }
  115. }
  116.  
  117. void mostrar(tlista lista)
  118. {
  119. pnodo i;
  120. if(lista.inicio!=NULL){
  121. for(i=lista.inicio;i!=NULL;i=i->sig){
  122. cout << "Nodo: " << i->dato << endl;
  123. }
  124. cout << endl;
  125. }
  126. else{
  127. cout << "LISTA VACIA" << endl;
  128. }
  129. }
  130.  

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 ;)


« Última modificación: 3 Septiembre 2018, 23:40 pm por Beginner Web » En línea

7w7
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Invertir contenido de una lista enlazada simple con apuntadores
« Respuesta #1 en: 3 Septiembre 2018, 23:55 pm »

¿Qué curso estás siguiendo?


En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Invertir contenido de una lista enlazada simple con apuntadores
« Respuesta #2 en: 4 Septiembre 2018, 00:13 am »

Ninguno bro



Hola, miren he logrado invertir la lista utilizando otra auxiliar con este metodo pero no entiendo bien del todo como ocurre la magia si alguien me puede explicar
Código
  1. void invertirLista(tlista &lista)
  2. {
  3. pnodo aux;
  4. tlista secundaria;
  5. inicia(secundaria);
  6. if(lista.inicio!=NULL){
  7. while(lista.inicio!=NULL){
  8. aux=quitar_inicio(lista);
  9. agregar_inicio(secundaria,aux);
  10. }
  11. lista.inicio=secundaria.inicio;
  12. lista.final=secundaria.final;
  13. }
  14. else{
  15. cout << "LISTA VACIA" << endl;
  16. }
  17. }

Y este metodo lo he usado para liberar los nodos de la lista, en este solo diganme si esta bien nada mas, y si pueden hacerme saber como puede mostrar por pantalla por medio de un metodo o funcion interna que me diga cuanta memoria estoy ocupando , gracias

Código
  1. void liberar_memoria(tlista &lista)
  2. {
  3. pnodo borrado;
  4. while(lista.inicio!=NULL){
  5. borrado=lista.inicio;
  6. lista.inicio=lista.inicio->sig;
  7. delete(borrado);
  8. }
  9. }
;-)


Mod: Prohibido el doble o triple post. Usa el botón "Modificar".
« Última modificación: 16 Septiembre 2018, 01:41 am por #!drvy » En línea

7w7
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Invertir contenido de una lista enlazada simple con apuntadores
« Respuesta #3 en: 4 Septiembre 2018, 20:26 pm »

Algo así debería devolverte en tamaño en bytes que ocupa la lista. No lo he probado.

Código
  1. size_t lista_memoria_usada(tlista &lista) {
  2.    size_t retval = 0;
  3.    pnodo aux = lista.inicio;
  4.  
  5.    while(aux) {
  6.        retval += sizeof(tlista);
  7.        aux = aux->sig;
  8.    }
  9.  
  10.    return retval;
  11. }
En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Invertir contenido de una lista enlazada simple con apuntadores
« Respuesta #4 en: 4 Septiembre 2018, 23:11 pm »

 ;-)
En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Invertir contenido de una lista enlazada simple con apuntadores
« Respuesta #5 en: 4 Septiembre 2018, 23:35 pm »

Creo que hay que sumar sizeof(tnodo) por cada item en la lista + sizeof(tlista) para la cabeza de ella.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda lista simple enlazada C
Programación C/C++
netca 3 3,839 Último mensaje 16 Agosto 2012, 00:06 am
por twins
[Resuelto]Duda lista simple enlazada en C
Programación C/C++
Zelandya 4 3,494 Último mensaje 30 Agosto 2012, 05:41 am
por Zelandya
borrar elemento de la lista enlazada simple
Programación C/C++
d91 2 3,274 Último mensaje 9 Junio 2014, 13:44 pm
por d91
Lista enlazada simple – listas ligadas [C]
Programación C/C++
DanielPy 3 2,831 Último mensaje 9 Junio 2015, 17:38 pm
por ivancea96
C -Error en lista enlazada simple
Programación C/C++
Niber 2 1,458 Último mensaje 22 Mayo 2019, 00:04 am
por Niber
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines