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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


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


Desconectado Desconectado

Mensajes: 557


youtu.be/0YhflLRE-DA


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

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. typedef char tcad[16];
  8. typedef struct tnodo *pnodo;
  9. typedef struct tnodo{
  10. tcad dato;
  11. pnodo sig;
  12. };
  13.  
  14. void inicia(pnodo &lista);
  15. void crear(pnodo &nuevo);
  16. void agregar_final(pnodo &lista, pnodo nuevo);
  17. pnodo quitar_inicio(pnodo &lista);
  18. void modificar_lista(pnodo &lista);
  19. void mostrar(pnodo lista);
  20.  
  21. int main()
  22. {
  23. pnodo milista, nodo;
  24. int opcion;
  25. inicia(milista);
  26. do{
  27. system("cls");
  28. cout << "1. Iniciar lista" << endl;
  29. cout << "2. Agregar elementos a la lista" << endl;
  30. cout << "3. Modificar lista" << endl;
  31. cout << "4. Mostrar lista" << endl;
  32. cout << "5. Salir" << endl;
  33. cin >> opcion;
  34. switch(opcion){
  35. case 1: inicia(milista); break;
  36. case 2: crear(nodo); if(nodo!=NULL){agregar_final(milista,nodo);}; break;
  37. case 3: modificar_lista(milista); break;
  38. case 4: cout << "***LISTA***" << endl; mostrar(milista); break;
  39. case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
  40. default: cout << "Opcion incorrecta" << endl;
  41. }
  42. system("pause");
  43. }while(opcion!=5);
  44. }
  45.  
  46. void inicia(pnodo &lista)
  47. {
  48. lista=NULL;
  49. }
  50.  
  51. void crear(pnodo &nuevo)
  52. {
  53. nuevo=new tnodo;
  54. if(nuevo!=NULL){
  55. cout << "Ingrese dato: "; cin >> nuevo->dato;
  56. nuevo->sig=NULL;
  57. }
  58. else{
  59. cout << "MEMORIA INSUFICIENTE" << endl;
  60. }
  61. }
  62.  
  63. void agregar_final(pnodo &lista, pnodo nuevo)
  64. {
  65. pnodo i;
  66. if(lista==NULL){
  67. lista=nuevo;
  68. }
  69. else{
  70. for(i=lista;i->sig!=NULL;i=i->sig);
  71. i->sig=nuevo;
  72. }
  73. }
  74.  
  75. pnodo quitar_inicio(pnodo &lista)
  76. {
  77. pnodo borrado;
  78. if(lista==NULL){
  79. borrado=NULL;
  80. }
  81. else{
  82. borrado=lista;
  83. lista=lista->sig;
  84. borrado->sig=NULL;
  85. }
  86. return borrado;
  87. }
  88.  
  89. void modificar_lista(pnodo &lista)
  90. {
  91. pnodo i;
  92. tcad buscado;
  93. cout << "Ingrese dia de la semana: "; cin >> buscado;
  94. for(i=lista;i!=NULL;i=i->sig){
  95. if(strcmp(i->dato,buscado)!=0){
  96. agregar_final(lista,i);
  97. delete(quitar_inicio(lista));
  98. }
  99. else{
  100. break;
  101. }
  102. }
  103. }
  104.  
  105. void mostrar(pnodo lista)
  106. {
  107. pnodo i;
  108. if(lista!=NULL){
  109. for(i=lista;i!=NULL;i=i->sig){
  110. cout << "Nodo: " << i->dato << endl;
  111. }
  112. cout << endl;
  113. }
  114. else{
  115. cout << "LISTA VACIA" << endl;
  116. }
  117. }
  118.  


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: Modificacion del orden de una lista simplemente enlazada
« Respuesta #1 en: 2 Septiembre 2018, 17:39 pm »

Que tal si haces una pasada para encontrar el elemento, el previo a este y el final de la lista?

Con eso tendrias:
- el primero
- uno antes del que buscas: prev
- el que buscas
- el ultimo

Luego haces que el previo apunte a null, que el ultimo apunte al inicio actual y que el inicio de la lista sea el que buscas




En línea

Beginner Web


Desconectado Desconectado

Mensajes: 557


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Modificacion del orden de una lista simplemente enlazada
« Respuesta #2 en: 2 Septiembre 2018, 21:47 pm »

No, tiene que ser lista enlazada simple sin apuntadores y sin usar listas auxiliares, igual gracias
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: Modificacion del orden de una lista simplemente enlazada
« Respuesta #3 en: 3 Septiembre 2018, 00:45 am »

Pues buscas el nodo que el siguiente sea el dato buscado.
Haces que el inició de la lista apunte al siguiente dato.
Haces que el el final de la lista apunte a lo que era originalmente el inicio de la lista.
Haces que el nodo en el que estás apunte su siguiente a NULL.
Necesitarás alguna variable pnodo auxiliar.
En línea

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


Desconectado Desconectado

Mensajes: 557


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Modificacion del orden de una lista simplemente enlazada
« Respuesta #4 en: 3 Septiembre 2018, 01:57 am »

Use un bubble_sort sobre la lista fue mas facil

Código
  1. void modificar_lista(pnodo &lista)
  2. {
  3. pnodo i, j;
  4. tcad buscado, aux;
  5. bool ordenado=true;
  6. cout << "Ingrese dia de la semana: "; cin >> buscado;
  7. while(ordenado){
  8. if(strcmp(lista->dato,buscado)==0){
  9. ordenado=false;
  10. }
  11. else{
  12. for(i=lista;i->sig!=NULL;i=i->sig){
  13. j=i->sig;
  14. strcpy(aux,i->dato);
  15. strcpy(i->dato,j->dato);
  16. strcpy(j->dato,aux);
  17. }
  18. }
  19. }
  20. }
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
}
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Lista Simplemente enlazada ayuda
Programación C/C++
Cpp 1 996 Último mensaje 11 Diciembre 2014, 07:29 am
por eferion
Ordenar lista simplemente enlazada en lenguaje C. « 1 2 3 »
Programación C/C++
NOB2014 20 10,233 Último mensaje 12 Julio 2016, 19:28 pm
por NOB2014
Borrar nodo en lista simplemente enlazada[C]
Programación C/C++
NOB2014 4 4,493 Último mensaje 28 Julio 2016, 14:22 pm
por NOB2014
Borrar ultimo nodo lista simplemente enlazada
Programación C/C++
robertoesimez 5 2,524 Último mensaje 23 Marzo 2017, 07:22 am
por MAFUS
Problema con una lista simplemente enlazada en C++
Programación C/C++
Mike_EDD 1 1,056 Último mensaje 4 Septiembre 2017, 22:24 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines