Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Como poner esta lista de forma ordenada?

Estas en el tema de ¿Como poner esta lista de forma ordenada? en el foro de C/C++ en Foros del Web. Buenas, me manejo ahora, que no me puedo quejar con las listas, pero el caso es que las hago en modo pila, y yo las ...
  #1 (permalink)  
Antiguo 17/05/2010, 10:30
 
Fecha de Ingreso: abril-2010
Mensajes: 13
Antigüedad: 13 años, 11 meses
Puntos: 0
¿Como poner esta lista de forma ordenada?

Buenas, me manejo ahora, que no me puedo quejar con las listas, pero el caso es que las hago en modo pila, y yo las quiero escribir en modo cola. Lo entiendo perfectamente gráficamente, creo que hay que hacerlo con un puntero auxiliar, pero llevo como 1 hora y no se me mete en la cabeza como hacerlo de forma que este en cola.

Este es el enunciado y el códgio:

Ejercicio 57: Diseña un programa que cree una lista de caracteres e inserte en ella 12 caracteres leídos de teclado. Cada carácter se añadirá a la cola de la lista. Al final se llamará a una función para recorrer y visualizar en pantalla los caracteres de la lista.
Código c:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. int listavacia(struct NODO *p);
  5. void
  6. recorrer(struct NODO *p);
  7.  
  8. struct NODO
  9. {
  10.     int dato;
  11.     struct NODO *siguiente;
  12. };
  13.  
  14. void main()
  15. {
  16.     struct NODO *lista=NULL;
  17.     struct NODO *pa, *pa2;
  18.     int i, vacio;
  19.     char letra;
  20.    
  21.     for (i=0; i<=11; i++)
  22.     {
  23.         printf ("Dime una letra\n");
  24.         letra=getche();
  25.  
  26.         pa=new NODO;
  27.         pa->dato=letra;
  28.  
  29.         vacio=listavacia(lista);
  30.  
  31.         if (vacio==1)
  32.         {
  33.             pa->siguiente=NULL;
  34.         }
  35.  
  36.         else
  37.         {
  38.             pa->siguiente=lista;
  39.            
  40.         }
  41.  
  42.         lista=pa;
  43.     }
  44.  
  45.     recorrer(lista);
  46.  
  47.     getch();
  48. }
  49.  
  50. int listavacia(struct NODO *p)
  51. {
  52.     if (p==NULL) return 1;
  53.     else return 0;
  54. }
  55.  
  56. void recorrer(struct NODO *p)
  57. {
  58.     if (listavacia(p)==1)
  59.     {
  60.         printf ("La lista no tiene nodos que recorrer\n");
  61.     }
  62.  
  63.     else
  64.     {
  65.         printf ("Los valores contenidos en la lista son:\n");
  66.         while (p!=NULL)
  67.         {
  68.             printf ("Valor: %c\n", p->dato);
  69.             p=p->siguiente;
  70.         }
  71.     }
  72. }

El examen final es mañana día martes y estoy muy preocupado con esta tontería.
Por favor, si alguien me puede echar una mano se lo agradecería mucho.

Saludos.
  #2 (permalink)  
Antiguo 17/05/2010, 11:00
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 9 meses
Puntos: 61
Respuesta: ¿Como poner esta lista de forma ordenada?

Siempre insertas al principio, y en ese codigo fuente esta la funcion recorrer(), que lo que hace es imprimir los valores en la salida.

Por que no la recorres() para insertar al final?

Basta que la recorras() para descubrir cual es el ultimo elemento, y asignarle como siguiente al nuevo nodo. El nuevo nodo siempre tendra como siguiente a NULL.
  #3 (permalink)  
Antiguo 17/05/2010, 11:03
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 9 meses
Puntos: 61
Respuesta: ¿Como poner esta lista de forma ordenada?

Una alternativa a esto es que "nodo" y "lista" no sean sinonimos.
"lista" podria ser una estructura, que tiene un puntero al primer y ultimo elemento. La "lista" es vacia si el primero es NULL.
Para el primer nodo, con lista vacia, la lista actualiza el puntero al primer elemento y al ultimo.
Cuando no es vacia, solo se actualiza el ultimo.

Etiquetas: lista, ordenada, poner, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:57.