7
Código en lenguaje c para listas doblemente enlazadas. #include <stdio.h> #include <stdlib.h> #include <conio.h> typedef struct Nodo{ int dato; Nodo *ant,*sig; }; Nodo* crear(); Nodo* getFinal(Nodo *lista); Nodo* eliminaInicio(Nodo *lista); Nodo* eliminaFinal(Nodo *lista); Nodo* insertaInicio(Nodo *lista); Nodo* insertaPosicion(Nodo *lista); Nodo* insertaFinal(Nodo *lista); void mostrarTodo(Nodo *lista); void mostrar(Nodo *lista); void mostrarFinal(Nodo *lista); int longitud(Nodo *lista); Nodo* crear() { Nodo *miNodo; miNodo=(Nodo*)malloc(sizeof(Nodo)); printf("\nIntroduce el dato\t"); scanf("%d",&miNodo->dato); miNodo->ant=NULL; miNodo->sig=NULL; return miNodo; } int longitud(Nodo *lista){ int i;

Código en Lenguaje c Para Listas Doblemente Enlazadas

Embed Size (px)

DESCRIPTION

El codigo contiene funciones para crear, insertar y eliminar elementos de la lista

Citation preview

Page 1: Código en Lenguaje c Para Listas Doblemente Enlazadas

Código en lenguaje c para listas doblemente enlazadas.#include <stdio.h>#include <stdlib.h>#include <conio.h>

typedef struct Nodo{ int dato; Nodo *ant,*sig; }; Nodo* crear();Nodo* getFinal(Nodo *lista);Nodo* eliminaInicio(Nodo *lista);Nodo* eliminaFinal(Nodo *lista);Nodo* insertaInicio(Nodo *lista);Nodo* insertaPosicion(Nodo *lista);Nodo* insertaFinal(Nodo *lista);void mostrarTodo(Nodo *lista);void mostrar(Nodo *lista);void mostrarFinal(Nodo *lista);int longitud(Nodo *lista); Nodo* crear(){ Nodo *miNodo; miNodo=(Nodo*)malloc(sizeof(Nodo)); printf("\nIntroduce el dato\t"); scanf("%d",&miNodo->dato); miNodo->ant=NULL; miNodo->sig=NULL; return miNodo; }

int longitud(Nodo *lista){int i;for(i=0;lista!=NULL;lista=lista->sig,i++);return i;

}

Page 2: Código en Lenguaje c Para Listas Doblemente Enlazadas

Nodo* insertaPosicion(Nodo *lista){

if(lista==NULL) return crear();int n;printf("Introduce la posicion en la que desea insertar el Nodo ");scanf("%d",&n);if(n<=1) return insertaInicio(lista);int lon=longitud(lista);if(n>lon) return insertaFinal(lista);

Nodo *aux,*inicio;inicio=lista;for(int i=1;i<n;i++,lista=lista->sig);aux=crear();aux->sig=lista;aux->ant=lista->ant;

aux->ant->sig=aux;aux->sig->ant=aux;

return inicio;}

Nodo* eliminaPosicion(Nodo *lista){

if(lista==NULL){printf("\nLa lista esta vacia");

}int n;printf("Introduce la posicion en la que desea eliminar el Nodo ");scanf("%d",&n);if(n<=1) return eliminaInicio(lista);int lon=longitud(lista);if(n>lon) return eliminaFinal(lista);

Nodo *aux,*inicio;inicio=lista;for(int i=1;i<n;i++,lista=lista->sig);

lista->sig->ant=lista->ant;lista->ant->sig=lista->sig;

Page 3: Código en Lenguaje c Para Listas Doblemente Enlazadas

free(lista);

return inicio;}

Nodo* getFinal(Nodo *lista){ if(lista!=NULL) { while(lista->sig!=NULL) lista=lista->sig; } return lista;}

Nodo* eliminaInicio(Nodo *lista){ if(lista==NULL) { printf("\nLa lista esta vacia"); return NULL; } else if(lista->sig==NULL){ free(lista); return NULL; } lista=lista->sig; free(lista->ant); lista->ant=NULL; return lista; }

Nodo* eliminaFinal(Nodo *lista){ Nodo *final; if(lista==NULL) return NULL; final=getFinal(lista); if(final->ant!=NULL) { final=final->ant; free(final->sig);

Page 4: Código en Lenguaje c Para Listas Doblemente Enlazadas

final->sig=NULL; return lista; } else if(final!=NULL) { free(final); lista=NULL; } }

Nodo* insertaInicio(Nodo *lista){ Nodo *aux; aux=crear(); if(lista!=NULL) { lista->ant=aux; aux->sig=lista; } return aux;}

Nodo* insertaFinal(Nodo *lista){ Nodo *aux,*final; final=getFinal(lista); aux=crear(); if(final!=NULL) { final->sig=aux; aux->ant=final; } return lista;}

void mostrarTodo(Nodo *lista){ if(lista==NULL) printf("Lista vacia"); else{ printf("\nLos datos ingresados fueron:\n"); while(lista!=NULL){ printf("\ndato: %d",lista->dato); lista=lista->sig;

Page 5: Código en Lenguaje c Para Listas Doblemente Enlazadas

} }}

void mostrar(Nodo *lista){ char opcion; if(lista!=NULL) printf("(1)Mostrar anterior (2)Mostrar siguiente (3)Salir"); printf("\nPrimer dato: dato %d\t",lista->dato); while(true){ opcion=getch(); switch(opcion) { case '1': if(lista->ant!=NULL){

lista=lista->ant;

} else printf("\nNo te puedes recorrer mas, estas al inicio de la lista\t");

break; case '2': if(lista->sig!=NULL){

lista=lista->sig;//printf("\ndato %d\t",lista->dato);

} else printf("\nNo te puedes recorrer mas, estas al final de la lista\t");

break; case '3': return; default:printf("\n JAJAJAAAAAAA"); } printf("\ndato %d\t",lista->dato); } }

void mostrarFinal(Nodo *lista){ lista=getFinal(lista); if(lista==NULL) printf("Lista vacia"); else{ printf("\nLos datos ingresados fueron:\n"); while(lista!=NULL){ printf("\ndato: %d\n",lista->dato);

Page 6: Código en Lenguaje c Para Listas Doblemente Enlazadas

lista=lista->ant; } }}

int main(void){ Nodo *n1; n1=NULL; int opcion; do{ printf("\nQue deseas hacer? \n1.Crear \n2.Mostrar Todo\n3.Insertar inicio\n4.Insertar Final\n5.Insertar Posicion\n6.Eliminar inicio\n7.Eliminar final\n8.Eliminar Posicion\n9.Mostrar por opciones\n10.Salir\t"); scanf("%d",&opcion); switch(opcion) { case 1: n1=crear(); break; case 2: mostrarTodo(n1); break; case 3: n1=insertaInicio(n1); break; case 4: n1=insertaFinal(n1); break; case 5: n1=insertaPosicion(n1); break; case 6: n1=eliminaInicio(n1); break; case 7: n1=eliminaFinal(n1); break; case 8: n1=eliminaPosicion(n1); break;

case 9: mostrar(n1); break; case 10: printf("\n\tAdios\n"); break; default: printf("Opcion incorrecta\n"); } }while(opcion!=10); system("pause");

return 0;}