Lista doblemente ligada, archivo cabecera.

#ifndef LISTA_DOBLE_H_INCLUDED #define LISTA_DOBLE_H_INCLUDED #include<windows.h> #include<stdio.h> #include<conio.h> typedef int elemento; typedef int logico; typedef int lado; typedef struct Nodo{ elemento dato; Nodo* sig; Nodo* ant; }; typedef Nodo* tnodo;//apuntador a nodo typedef Nodo* posicion;//apuntador a nodo void inicializa(tnodo &L) { L=new Nodo; L->ant=NULL; L->sig=NULL; } logico vacia_d(tnodo L)//vacia segun el lado { if(L->sig==NULL) return 1; return 0; } logico vacia_i(tnodo L)//vacia segun el lado { if(L->ant==NULL) return 1; return 0; } void imprime_d(tnodo L) { int bandera =0; if(vacia_d(L)) printf("\nLista vacia\n"); else { tnodo aux = L->sig;//asignamos el inicio printf("\n\n**Pares**\n"); printf("\nAscendente\n"); while(aux!=NULL && bandera==0)//hasta que llegue al final o encuentre el dato { if(aux->sig==NULL)//para imprimir el ultimo dato { printf("%i ",aux->dato); bandera=1; } else { printf("%i ",aux->dato);//imprime todos los demas datos aux=aux->sig; } } printf("\nDesendente\n");//de regreso while(aux!=L) { printf("%i ",aux->dato); aux=aux->ant; } } } void imprime_i(tnodo L) { int bandera=0; if(vacia_i(L)) printf("\nLista vacia\n"); else { tnodo aux= L->ant;//asignamos el inicio printf("\n\n**Impares**\n"); printf("\nAscendente\n"); while(aux!=NULL && bandera==0)//hasta que llegue al final o encuentre el dato { if(aux->ant==NULL)//imprime el ultimo dato de la lista { printf("%i ",aux->dato); bandera=1; } else { printf("%i ",aux->dato);//imprime todos los demas aux=aux->ant; } } printf("\nDesendente\n");//imprime de regreso while(aux!=L) { printf("%i ",aux->dato); aux=aux->sig; } } } void inserta_d(tnodo &L,elemento x,posicion p)//ingresa adelante de la posicion, caso especial para el ultimo { tnodo aux= new Nodo; if(aux==NULL) printf("Error. Memoria llena"); else { aux->dato=x;//asigna el dato aux->sig=p->sig;//asigna la liga de sig p->sig=aux;//asigna la ligadura de pos adelante de p aux->ant=p;//asigna la ligadura de ant para ligarlo con p if(aux->sig!=NULL) aux->sig->ant=aux;//ligadura de ant del siguiente nodo a aux } } void inserta_i(tnodo &L,elemento x,posicion p) { tnodo aux= new Nodo; if(aux==NULL) printf("Error. Memoria llena"); else { aux->dato=x;//asigna el dato aux->ant=p->ant;//asigna la liga de anterior p->ant=aux;//asigna la ligadura para insertar aux antes de p aux->sig=p;//asigna la ligadura sig para ligarlo con p if(aux->ant!=NULL) aux->ant->sig=aux;//ligadura sig del anterior nodo a aux } } int elimina_d(tnodo &L, posicion p)//caso especila para el ultimo, eliminamos p { if(vacia_d(L) || p == NULL) return 0; else { p->ant->sig = p->sig; if(p->sig!=NULL) p->sig->ant = p->ant; free(p); return 1; } } int elimina_i(tnodo &L, posicion p) { if(vacia_d(L) || p == NULL) return 0; else { p->sig->ant = p->ant; if(p->ant!=NULL) p->ant->sig = p->sig; free(p); return 1; } } posicion localiza_d(tnodo L,elemento x) { int bandera=0; tnodo aux; tnodo pos=NULL; if(vacia_d(L)) { return NULL; } else { aux = L->sig;//inicio while(aux!=NULL && bandera == 0)//llega al final, no llega a comparar al ultimo en el while { if(aux->dato==x || (aux->sig==NULL && aux->dato==x))//si es igual o si el ultimo dato es igual { pos=aux; bandera =1; } aux=aux->sig; } return pos; } } posicion localiza_i(tnodo L,elemento x) { int bandera=0; tnodo aux; tnodo pos=NULL; if(vacia_i(L)) { return NULL; } else { aux = L->ant;//inicio while(aux!=NULL && bandera == 0)//llega al final, no llega a comparar al ultimo en el while { if(aux->dato==x || (aux->ant==NULL && aux->dato==x))//si es igual o si el ultimo dato es igual { pos=aux; bandera =1; } aux=aux->ant; } return pos; } } elemento recupera(tnodo L, posicion p) { if(p!=NULL)//p es valido return p->dato; else//p es invalido { printf("\nNo se encontro\n"); return -1; } } posicion primero(tnodo L) { return L; } posicion siguiente (tnodo L, posicion p) { return p->sig; } posicion anterior (tnodo L, posicion p) { return p->ant; } #endif // LISTA_DOBLE_H_INCLUDED

Be the first to comment

You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.