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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda en listas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda en listas  (Leído 1,809 veces)
josue_tux

Desconectado Desconectado

Mensajes: 45


Ver Perfil
ayuda en listas
« en: 27 Junio 2011, 23:39 pm »

hola tengo una consulta como puedo modificar mi programa para que acepte cadenas y no solo un caracter: aqui adjunto mi programa.
Código:
#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');


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: ayuda en listas
« Respuesta #1 en: 28 Junio 2011, 01:00 am »

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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct lista
  6. {
  7.    char *cadena;
  8.    struct lista *sig;
  9. };
  10.  
  11. struct lista *new(void)
  12. {
  13.    return malloc(sizeof(struct lista));
  14. }
  15.  
  16. void liberar(struct lista **inicio)
  17. {
  18.    struct lista *aux = *inicio;
  19.    while(*inicio != NULL)
  20.    {
  21.        struct lista *nuevo = new();
  22.        nuevo = *inicio;
  23.        *inicio = (*inicio)->sig;
  24.        free(nuevo->cadena);
  25.        free(nuevo);
  26.    }
  27. }
  28.  
  29. void insertar(struct lista **inicio, char *s)
  30. {
  31.    struct lista *nuevo = new();
  32.  
  33.    /* Asignamos espacio a la cadena */
  34.    nuevo->cadena = malloc(sizeof(char) * 100);
  35.    strncpy(nuevo->cadena, s, strlen(s));
  36.  
  37.    nuevo->sig = *inicio;
  38.    *inicio = nuevo;
  39. }
  40.  
  41. void ver(struct lista *l)
  42. {
  43.    struct lista *aux = l;
  44.    while(aux != NULL)
  45.    {
  46.        puts(aux->cadena);
  47.        aux = aux->sig;
  48.    }
  49. }
  50.  
  51. int main(void)
  52. {
  53.    /* Creamos nuestra lista, inicialmente vacia */
  54.    struct lista *inicio = NULL;
  55.    insertar(&inicio, "Leo");
  56.    insertar(&inicio, "Lala");
  57.    insertar(&inicio, "Hola");
  58.    insertar(&inicio, "Mundo");
  59.  
  60.    ver(inicio);
  61.  
  62.    /* Liberamos la memoria ocupada tanto de los nodos como de las cadenas */
  63.    liberar(&inicio);
  64.    ver(inicio);
  65.  
  66. return EXIT_SUCCESS;
  67. }
  68.  

Otra cosa, utiliza el GeShi del foro para resaltar el código.


« Última modificación: 28 Junio 2011, 01:19 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Uso de Listas: Subprograma que lea 2 listas y forme una.
Dudas Generales
hbenitez 2 3,320 Último mensaje 8 Agosto 2010, 20:11 pm
por hbenitez
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
Gerik 0 5,180 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
Listas y Sublistas..Ayuda!!
Programación C/C++
willy1855 2 5,967 Último mensaje 9 Mayo 2012, 16:40 pm
por durasno
relacionar 2 listas en VB 6.. ayuda!!!!
Programación Visual Basic
euphemia 2 2,044 Último mensaje 22 Octubre 2012, 14:56 pm
por seba123neo
Ayuda con Multi Listas POO C++
Programación C/C++
hyperiod 1 6,512 Último mensaje 17 Septiembre 2013, 09:17 am
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines