Sei sulla pagina 1di 6

#include <iostream>

#include <stdio.h>
#include<stdlib.h>
#include<cstring>
#include <string.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 "Lista doblemente encadenada"

/*
Buenas tardes profesor, este ejercicio represento un verdadero reto para nuestro grupo
realizamos el ejercicio por mas de una semana y poco a poco lo sacamos sin embargo
presentamos algunas dificultades y el código contiene errores que le comunicaremos en
clase,
sin embargo dejaremos notas de lo que sucede en la ejecución, muchas gracias por la
comprención.

NOTA1: el menu funciona perfectamente e invoca las funciones, la funcion incertar funciona
bien,lee los datos y los guarda, sin embargo al imprimir la lista el nombre no se muestra
con letras sino muestra una lista de números.

*/

//Void de cada función

void insertar(struct nodo **cab);


void buscar(struct nodo **cab);
void eliminar(struct nodo **cab);
void imprimir(struct nodo *);

//Inicio de estructura por nodos

struct nodo{
struct nodo * ant;
int cod;
int edad;
char name[50];

struct nodo * sig;


};

//Código Fuente o Principal

main(){
struct nodo * cab=NULL;
int continuar=1, opcion2;

while (continuar==1){

printf("\n Menu\n\n");
printf("1. Insertar:\n");
printf("2. Buscar:\n");
printf("3. Eliminar\n");
printf("4. Salir.");
scanf("%d",&opcion2);

if(opcion2==1){

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

else
{
if(opcion2==3){
eliminar(&cab);
printf("\n");
}
else
{

if(opcion2==4)
{
printf("\n ¿Desea salir?\n salir del programa\n");
printf("1.No\n");
printf("2.Si\n");
scanf("%d",&continuar);
}
}
}
getchar();
printf("\n\n Precione enter para salir\n\n");
return 0;

}
}
}
//Insertar

void insertar(struct nodo **cab){

int vcod;
int vedad;
char vname[50];
int codigoaux;
int contador=0;
struct nodo *q, *r ,*a, *aux;

printf("\n Ingresar codigo:\t");


scanf("%d",&vcod);

printf("\n Ingresar edad:\t");


scanf("%d",&vedad);

fflush(stdin);

printf("\nEscriba el nombre: ");


scanf("%[^\n]", &vname); //**** leer cadena con espacios

fflush(stdin);//**** limpiar buffer

if(*cab==NULL){

q=localizar;
contador = contador + 1;
q->cod=vcod;
q->edad=vedad;
strcpy(q->name,vname);

q->sig=NULL;
q->ant=NULL;
*cab=q;

}
else
{

q=*cab;
codigoaux= q->cod;
r=localizar;
r->cod=vcod;
r->edad=vedad;
strcpy(q->name,vname);

if((vcod)<q->cod){

r->sig=*cab;
r->ant=NULL;
*cab=r;

}
else{

while(q!=NULL && contador==0){

if(q->sig==NULL)
{
q->sig=r;
r->ant=q;
r->sig=NULL;
contador=1;

}
else{

if(vcod<q->sig->cod){
a=q->sig;
r->sig=a;
a->ant=r;
q->sig=r;
r->ant=q;
contador=1;

}
else{

q=q->sig;
}
}
}
}
}
imprimir(*cab);
}

// Buscar

void buscar(struct nodo **cab){

int valor, a;
struct nodo *q;
q=*cab;
printf("Ingrese el valor a buscar");
scanf("%d", &valor);
a=0;

while(q!=NULL){
if(q->cod==valor){

printf("Codigo encontrado: %d: %d\n", q->cod, q->edad,q->name);


a=1;

}
else
{

q=q->sig;

}
if(a==0){

printf("El valor no fue encontrado");

imprimir(*cab);
}
}

//Eliminar

void eliminar(struct nodo **cab){

int valor, a;

struct nodo *q, *r;


q=*cab;

printf("Ingrese el valor a eliminar: ");


scanf("%d", &valor);
a=0;

while(q!=NULL && a==0){

if(q->cod==valor){

printf("Codigo eliminado: %d: %d\n", q->cod, q->edad,q->name);


r=q->sig;
q->ant->sig=r;
r->ant=q->ant;
free(q);
a=1;

}
else
{

q=q->sig;
}

if(a==0){

printf("El valor no fue encontrado: ");

}
imprimir(*cab);
}

// Imprimir

void imprimir(struct nodo *p){

while(p!=NULL){

printf("\n Codigo: %d\tEdad: %d\n Nombre: %d", p->cod, p->edad,p->name);


printf("\n");
p=p->sig;

}
printf("\n");
}

Potrebbero piacerti anche