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');
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;
}
}
void insertar(struct lista **inicio, char *s)
{
struct lista *nuevo = new();
/* Asignamos espacio a la cadena */
nuevo
->cadena
= malloc(sizeof(char) * 100);
nuevo->sig = *inicio;
*inicio = nuevo;
}
void ver(struct lista *l)
{
struct lista *aux = l;
while(aux != NULL)
{
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.