ayuda en listas

Iniciado por josue_tux, 27 Junio 2011, 23:39 PM

0 Miembros y 1 Visitante están viendo este tema.

josue_tux

hola tengo una consulta como puedo modificar mi programa para que acepte cadenas y no solo un caracter: aqui adjunto mi programa.

#include <stdio.h>
#include <stdlib.h>
typedef struct nodo
{
   char elemento;
  struct nodo *siguiente;
  struct nodo *anterior;
} NODOLISTA;

typedef NODOLISTA *PtrNodo;
typedef NODOLISTA *Lista;

void insertar(Lista*, char);
void mostrar(Lista);

main()
{
      Lista lista=NULL;
      insertar(&lista,'Juan');
      insertar(&lista,'Homero');
           
      mostrar(lista);
      getchar();
      return 0;
}

void insertar(Lista *lista, char nombre)
{
   PtrNodo nuevo, actual;
   nuevo = (PtrNodo)malloc(sizeof(NODOLISTA));
   nuevo->elemento = nombre;
   actual = *lista;
   if(actual)
     {
         while(actual->anterior)
              {
                actual = actual->anterior;
              }
     }
   if(!actual || actual->elemento > nombre)
     {
        nuevo->siguiente = actual;
        nuevo->anterior = NULL;
        if(actual)
          {
            actual->anterior = nuevo;
          }
        if(!*lista)
          {
            *lista = nuevo;
          }
     }
   else
      {
         while(actual->siguiente &&actual->siguiente->elemento <= nombre)
              {
                 actual = actual->siguiente;
              }
         nuevo->siguiente= actual->siguiente;
         actual->siguiente = nuevo;
         nuevo->anterior = actual;
         if(nuevo->siguiente)
           {
         nuevo->siguiente->anterior = nuevo;
      }
   }
}

void mostrar(Lista lista)
{
  PtrNodo nodo = lista;
  if(!lista)
    {
      printf("\"La Lista esta Vacia\"");
    }
  else
     {
         while(nodo->anterior)
              {
                 nodo = nodo->anterior;
              }
         while(nodo)
              {
                 printf("-> %s", nodo->elemento);
                 nodo = nodo->siguiente;
              }

     }   
  printf("\n");
}




o alguien no tiene alguna funcion de insertar de una lista de la siguiente forma
insertar(lista,'juan');

leogtz

#1
Aquí te dejo un ejemplo que acabo de hacer. Fijate en el puntero a char. Debes de asignarle memoria a la cadena.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct lista
{
   char *cadena;
   struct lista *sig;
};

struct lista *new(void)
{
   return malloc(sizeof(struct lista));
}

void liberar(struct lista **inicio)
{
   struct lista *aux = *inicio;
   while(*inicio != NULL)
   {
       struct lista *nuevo = new();
       nuevo = *inicio;
       *inicio = (*inicio)->sig;
       free(nuevo->cadena);
       free(nuevo);
   }
}

void insertar(struct lista **inicio, char *s)
{
   struct lista *nuevo = new();

   /* Asignamos espacio a la cadena */
   nuevo->cadena = malloc(sizeof(char) * 100);
   strncpy(nuevo->cadena, s, strlen(s));

   nuevo->sig = *inicio;
   *inicio = nuevo;
}

void ver(struct lista *l)
{
   struct lista *aux = l;
   while(aux != NULL)
   {
       puts(aux->cadena);
       aux = aux->sig;
   }
}

int main(void)
{
   /* Creamos nuestra lista, inicialmente vacia */
   struct lista *inicio = NULL;
   insertar(&inicio, "Leo");
   insertar(&inicio, "Lala");
   insertar(&inicio, "Hola");
   insertar(&inicio, "Mundo");

   ver(inicio);

   /* Liberamos la memoria ocupada tanto de los nodos como de las cadenas */
   liberar(&inicio);
   ver(inicio);

return EXIT_SUCCESS;
}


Otra cosa, utiliza el GeShi del foro para resaltar el código.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com