1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Re:Programacion en C - Listas Simplemente enlazadas
« en: 07 de Mayo 2014, 23:47 »
Como prometí, aquí les traigo el código para insertar nombres en una lista, es decir, en cada nodo insertaremos un nombre:
A continuación lista.h
Espero que les sirva . Ahora voy por árboles binarios xD. Saludos
Código: [Seleccionar]
#include "lista.h"
Lista *creaLista()
{
Lista *nuevo;
if(nuevo = (Lista *) malloc(sizeof(Lista))) // Pide memoria para la lista
{
nuevo->tamano = 0; // Lista vacía
nuevo->inicio = nuevo->fin = NULL; // Inicio y Fin apuntan a NULL
}
return nuevo;
}
Nodo *crearNodoCola(Info *dato, Nodo *ptro)
{
Nodo *nuevo;
if(nuevo = (Nodo *) malloc(sizeof(Nodo))) // Pide memoria para el nodo
{
nuevo->datos = dato;
nuevo->siguiente = ptro;
}
return nuevo;
}
Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente)
{
Nodo *nuevo;
if(nuevo = (Nodo *) malloc(sizeof(Nodo)))
{
nuevo->datos = dato;
nuevo->anterior = anterior;
nuevo->siguiente = siguiente;
}
return nuevo;
}
Info *agregar(char *dato1)
{
Info *pdato;
if(pdato = (Info *) malloc(sizeof(Info))){
pdato->dato1 = dato1;
return pdato;
}else{
printf("problemas en la inserción\n");
exit(0);
}
}
void ingresar(Info **pdato, char *dato1)
{
if(*pdato = (Info *) malloc(sizeof(Info)))
{
(*pdato)->dato1 = dato1;
}
else
{
printf("problemas en el push\n");
exit(0);
}
}
bool insertar(Lista *plista, char *nombre)
{
Nodo *aux;
Info *dato = agregar(nombre);
if(aux = crearNodo(dato, NULL, plista->inicio)){
if(plista->tamano == 0)
plista->fin = aux;
else
plista->inicio->anterior = aux;
plista->inicio = aux;
plista->tamano++;
return true;
}
else
return false;
}
void recorrer(Lista *plista)
{
Nodo *i;
i = plista->inicio;
printf("La lista tiene = ");
while(i != NULL)
{
printf("%s ", i->datos->dato1);
i = i->siguiente;
}
printf("\n");
}
int main(int argc, char *argv[])
{
Lista *nombres;
nombres = creaLista();
char n1[100]="Nicole", n2[100]="Sandra", n3[100]="Javiera", n4[100]="Camila", n5[100]="Johana";
insertar(nombres, n1);
insertar(nombres, n2);
insertar(nombres, n3);
insertar(nombres, n4);
insertar(nombres, n5);
recorrer(nombres);
return 0;
}
A continuación lista.h
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef struct{
char* dato1;
}Info;
typedef struct nodo {
Info *datos;
struct nodo *siguiente;
struct nodo *anterior;
}Nodo;
typedef struct lista {
Nodo *inicio;
Nodo *fin;
int tamano;
}Lista;
Lista *crearLista();
Nodo *crearNodo(Info *dato, Nodo *anterior, Nodo *siguiente);
void destruirLista(Lista *plista);
bool insertar(Lista *plista, char *nombre);
void recorrer(Lista *plista);
Espero que les sirva . Ahora voy por árboles binarios xD. Saludos