Está en la página 1de 5

#include <stdlib.

h>
#include <stdio.h>
#define localizar (struct nodo *)malloc(sizeof(struct nodo))

//Angy Lizeth Pabon Villar & Sonia Alejandra Morales Ardila

// ESTRUCTURA Y BASES DE DATOS GRUPO 1


// Codigo "Filas, con adiciones laterales"y estructura

/**La fila es una estructura de datos que permite almacenar datos en el orden FIFO
(First In First Out) en español, Primero en Entrar, Primero en Salir).
La recuperación de los datos es hecha en el orden en que son insertados y en este caso
se pueden recuerar en dos lados/direcciones(Derecha e Izquierda) y de igual manera
se pueden eliminar por ambos lados.
**/

//Inicio de estructura por nodos

struct nodo{
int info;
struct nodo * sig;
};

//Void de cada función

void Imprimir(struct nodo *);


void adicionarizquierda(struct nodo **p,int i);
void adicionarderecha(struct nodo **cab);
void eliminarizquierda(struct nodo **p);
void eliminarderecha(struct nodo **p);

//Código Fuente o Principal

main()
{
int c=1, opcion2;
int i=1;
struct nodo *cab=NULL;
while(c==1){
printf("Elegir una opcion \n");
printf("1. adicionar izquierda \n");
printf("2. adicionar derecha \n");
printf("3. eliminar izquierda \n");
printf("4. eliminar derecha \n");
printf("5. salir \n");
scanf("%d", &opcion2);

if(opcion2==1){
adicionarizquierda(&cab,i);
printf("\n");

}
else{
if(opcion2==2){
adicionarderecha(&cab);
printf("\n");
}

else{ if(opcion2==3){
eliminarizquierda(&cab);
printf("\n");
} else {
if(opcion2==4){
eliminarderecha(&cab);
printf("\n");
} else{
if(opcion2==5){
printf("¿Desea salir? \n");
printf("1 No \n");
printf("2 Si \n");
scanf("%d",&c);
printf("\n");
}else {
printf("Opcion invalida \n");
printf("\n");
}
}
}
}
}
}
}

//Funciones

// ADICIONAR POR LA IZQUIERDA

void adicionarizquierda(struct nodo **p,int i)

{
int x=0, c=1, r;
int opcion2;
struct nodo *q;

q=localizar;
printf("Digite un valor \n");
scanf("%d",&x);
printf("\n");
q->info=x;
q->sig=*p;
*p=q;
printf("Los valores en la lista son: \n");
Imprimir(q);
printf("\n");

// ADICIONAR POR LA DERECHA

void adicionarderecha(struct nodo **cab){


int valor ;
struct nodo *q,*r;
printf("Digite un valor \n");
scanf("%d",&valor);
if (*cab==NULL){
q=localizar;
q -> info=valor;
q -> sig=NULL;
*cab=q;
}
else{
q=localizar;
q=*cab;
while (q->sig!=NULL){
q=q->sig;
}
r=localizar;
r->sig=NULL;
q->sig=r;
r->info=valor;
}
printf("Los valores en la lista son: \n");
Imprimir(*cab);
printf("\n");
}

// ELIMINAR POR LA IZQUIERDA

void eliminarizquierda(struct nodo **p){


struct nodo*q,*r;
if (*p==NULL){
printf("No hay valores para eliminar");
printf("\n");
}else{
q=*p;
*p=q->sig;
free(q);
if(*p==NULL){
printf("No hay valores para eliminar\n");
}else{
printf("Los valores en la lista son: \n");
}

Imprimir(*p);
printf("\n");
}

// ELIMINAR POR LA DERECHA

void eliminarderecha(struct nodo **p){


struct nodo*q;
if (*p==NULL){
printf("No hay valores para eliminar");
printf("\n");
}else{

q=*p;
while(q->sig->sig!=NULL){
q=q->sig;
}
free(q->sig);
q->sig=NULL;
if(*p==localizar){
printf("No hay valores para eliminar\n");
}else{
printf("Los valores en la lista son: \n");
}
}

Imprimir(*p);
printf("\n");
}

// IMPRIMIR

void Imprimir (struct nodo *p){


struct nodo *q;
if(p==NULL){
printf("La lista se ha vaciado");
printf("\n");
}else{
while (p!=NULL){
printf("%d",p->info);
printf("\n");
p=p->sig;
}
}
}

También podría gustarte