You are on page 1of 4

#include <stdio.

h>
#include <stdlib.h>

struct lista {
int data;
struct lista *anterior;
struct lista *siguiente;
};

typedef struct lista Nodo;
typedef Nodo *ptrNodo;

void instrucciones();
void insertarHead(ptrNodo *head, ptrNodo *tail, int data);
void insertarTail(ptrNodo *head, ptrNodo *tail, int data);
int eliminarHead(ptrNodo *head, ptrNodo *tail);
int eliminarTail(ptrNodo *tail, ptrNodo *head);
void imprimir(ptrNodo head);
int estado(ptrNodo head);

int main(){
ptrNodo head = NULL;
ptrNodo tail = NULL;

int data,eleccion,elemento;
instrucciones();
printf("Eleccion: ");
scanf("%d",&eleccion);

while(eleccion!=6){
switch(eleccion){
case 1:
printf("Escriba un dato entero: ");
scanf("%d",&data);
insertarHead(&head,&tail,data);
printf("Dato agregado \n\n\n");
break;

case 2:
printf("Escriba un dato entero: ");
scanf("%d",&data);
insertarTail(&head,&tail,data);
printf("Dato agregado \n\n\n");
break;

case 3:
if(!estado(head) && !estado(tail)){
printf("Dato eliminado \n");
printf("Dato recuperado: %d \n", eliminarHead(&head,&tail));
}
else{
printf("Lista vacia \n\n\n");
}
break;

case 4:
if(!estado(head) && !estado(tail)){
printf("Dato eliminado \n");

Nuevo->anterior = (*head)->anterior.. *head = Nuevo. break. (*head)->anterior = NULL... Nuevo->siguiente = *head. } else{ Nuevo->data = dato. (*tail)->siguiente = NULL. ptrNodo *tail.. } *head = Nuevo. if(Nuevo != NULL){ if(!estado(*head) && !estado(*tail)){ Nuevo->data = dato. int dato){ ptrNodo Nuevo.&tail)). } void instrucciones(){ printf(" \n Introduzca su eleccion: \n" "1. break. case 5: imprimir(head).Eliminar elemento por el frente \n" "4. *tail = Nuevo. } void insertarHead(ptrNodo *head.. } break. printf("Eleccion: "). printf("Dato recuperado: %d \n".Insertar elemento por el final \n" "3.Eliminar elemento por el final \n" "5.&eleccion). eliminarTail(&head.. } return 0. Nuevo = (ptrNodo)malloc(sizeof(Nodo)).Salir \n"). } . } else printf("No hay memoria \n"). default: printf("Opcion no disponible \n"). (*head)->anterior = Nuevo. } instrucciones().Ver lista \n" "6. } else{ printf("Lista vacia \n\n\n"). scanf("%d".Insertar elemento por el frente \n" "2.

} *tail=Nuevo.void insertarTail(ptrNodo *head. . *tail = (*tail)->anterior. free(aux). (*tail)->siguiente = NULL. (*head)->anterior = aux->anterior. } else{ dato = (*head)->data. *tail = Nuevo. (*head)->anterior = NULL. } else{ dato = (*tail)->data. *head = NULL. aux = *tail. ptrNodo aux. Nuevo->data = dato. } int eliminarTail(ptrNodo *head. aux = *tail. } else printf("No hay memoria \n"). } return dato. Nuevo = (ptrNodo)malloc(sizeof(Nodo)). ptrNodo *tail. ptrNodo aux. ptrNodo *tail){ int dato. free(aux). free(aux). *tail = NULL. Nuevo->anterior = *tail. (*tail)->siguiente = Nuevo. ptrNodo *tail){ int dato. } int eliminarHead(ptrNodo *head. aux = *head. Nuevo->siguiente = (*tail)->siguiente. (*tail)->siguiente = aux->siguiente. if((*tail)->siguiente == NULL){ dato = (*tail)->data. if(Nuevo != NULL){ if(!estado(*head) && !estado(*tail)){ Nuevo->data = dato. free(aux). aux = *head. if( (*head)->siguiente == NULL){ dato = (*head)->data. *head = (*head)->siguiente. int dato){ ptrNodo Nuevo. } else{ *head = Nuevo.

". } else{ printf("La lista es: \n").head->data). while(head != NULL){ printf("%d <. else return 0. } } } . } return dato. } int estado(ptrNodo head){ if(head == NULL) return 1. } void imprimir(ptrNodo head){ if(head == NULL){ printf("Lista vacia \n"). head = head->siguiente.