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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  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 2,889 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 557


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

{_id: "5ef16999f6ce240abc225ss3",
nombre: "Ana Keldysh",
nacionalidad: "Argentina",
edad: "17",
profesion: "Desarrollador Web Full Stack, pero la verdad hago de todo.",
"__v": 0
}
MAFUS


Desconectado Desconectado

Mensajes: 1.479



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

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
Beginner Web


Desconectado Desconectado

Mensajes: 557


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

{_id: "5ef16999f6ce240abc225ss3",
nombre: "Ana Keldysh",
nacionalidad: "Argentina",
edad: "17",
profesion: "Desarrollador Web Full Stack, pero la verdad hago de todo.",
"__v": 0
}
MAFUS


Desconectado Desconectado

Mensajes: 1.479



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

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
Beginner Web


Desconectado Desconectado

Mensajes: 557


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

{_id: "5ef16999f6ce240abc225ss3",
nombre: "Ana Keldysh",
nacionalidad: "Argentina",
edad: "17",
profesion: "Desarrollador Web Full Stack, pero la verdad hago de todo.",
"__v": 0
}
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

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 2,806 Último mensaje 16 Agosto 2012, 00:06 am
por twins
[Resuelto]Duda lista simple enlazada en C
Programación C/C++
Zelandya 4 2,263 Último mensaje 30 Agosto 2012, 05:41 am
por Zelandya
Insertar un elemento ordenadamente en una lista enlazada simple
Programación C/C++
NathanD 4 23,982 Último mensaje 27 Abril 2013, 14:25 pm
por NathanD
borrar elemento de la lista enlazada simple
Programación C/C++
d91 2 2,166 Último mensaje 9 Junio 2014, 13:44 pm
por d91
Lista enlazada simple – listas ligadas [C]
Programación C/C++
DanielPy 3 1,663 Último mensaje 9 Junio 2015, 17:38 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines