Estoy haciendo un ejercicio en C++ que pide utilizar el concepto de LISTAS DOBLEMENTE ENLAZADAS y tengo algunos problemas para crear las funciones
de BORRAR un dato de la lista, MODIFICARLO, y BUSCARLO.
Si bien pude hacer lo de insertar los datos gracias a informacion que vi en estos foros, los demas se me hacen imposibles.
Incluso cree los menus y todo lo necesario para que este figurando, pero lo de las funciones no lo consigo crear y no veo ayuda en la red solo teoria.
si saben algo que pueda usar se agradece mucho...
Código
#include <stdio.h> #include <conio.h> #include <ctype.h> #include <string.h>
la consigna pedia ingresar datos de una persona y mostrarlos..
Código
struct datos { int dni; char nombre[25]; char apellido[25]; int edad; };
Código
struct listaenlazada { struct datos pers; struct listaenlazada *sig; struct listaenlazada *ant; };
son las que pude crer sim problemas, faltaria las de borrado , modificacion, y busqueda
Código
void listdoubleen(void); struct listaenlazada *insertlistdouble(struct listaenlazada *primero); void printlistdouble(struct listaenlazada *primero);
hay opciones que no las uso que estan con X, por que eran para filas colas, etc, eso lo pude hacer.
Código
main() { int op; do { printf("\n*************Menu Inicial*************\n"); printf("\n\tElija una Opcion:\n\t1-xxx\n\t2-xxx\n\t3-xxx\n\t4-LISTA DOBLEMENTE ENLAZADA\n\t5-SALIR\n"); printf("\n\tIntroduzca el nro:"); scanf("%d",&op); switch(op) { case 1: break; case 2: break; case 3: break; case 4: listdoubleen(); break; case 5: break; default: printf("la opcion elegida es incorrecta\n"); break; } }while(op!=5); }
Código
//+++++++++++++ void listdoubleen(void) { int op,op2,op3,doc; char apell[25],apell2[25],listaenlazada[30]; struct listaenlazada *primero=NULL; do { // clrscr(); printf("\nSeleccione una opcion:\n\n\t1-Insertar datos\n\t2-Quitar datos\n\t3-Imprimir datos en pantalla\n\t4-Modificar un Registro\n\t5-Buscar un Registro\n\t6-Volver al menu principal\n\n"); printf("\n\tIngresar el nro: "); scanf("%d",&op); switch(op) { case 1: primero=insertlistdouble(primero); break; case 2: printf("Sacar un elemento de la lista:\nElija una opcion:\n\t1-DNI\n\t2-Apellido\n\n"); printf("\n\tIngresar el nro: "); scanf("%d",&op2); switch(op2) { case 1: printf("Ingrese el numero de DNI: "); scanf("%d",&doc); break; case 2: printf("Ingrese el Apellido que desea eliminar: "); fflush(stdin); gets(apell); break; default: printf("Opcion incorrecta\n"); break; } break; case 3: printlistdouble(primero); break; case 4: printf("Ingrese el DNI del registro que desea modificar:\n"); scanf("%d",&doc); break; case 5: printf("Desea buscar por?\n\t1-Apellido\n\t2-Dni\n\n"); scanf("%d",&op3); switch(op3) { case 1: printf("Ingrese el apellido que desea buscar: "); fflush(stdin); gets(apell2); break; case 2: printf("Ingrese el numero de DNI que desea buscar: "); scanf("%d",&doc); break; default: printf("Opcion Incorrecta\n"); break; } break; case 6: break; default: printf("Opcion Incorrecta\n"); break; } }while(op!=6); getch(); }
aca inserte los datos
Código
struct listaenlazada *insertlistdouble(struct listaenlazada *primero) { struct listaenlazada *a,*b,*aux; int band=0,op,op2; char resp; a=b=primero; aux=new struct listaenlazada; if(!aux) { printf("No hay espacio disponible en memoria\n"); getch(); return (primero); } do { op2=0; band=0; printf("Ingresar el DNI: "); scanf("%d",&aux->pers.dni); while(b) { if(aux->pers.dni<b->pers.dni) { break; } if(aux->pers.dni==b->pers.dni) { band=1; break; } a=b; b=a->sig; } if(band==1) { printf("\nEl Dni Ingresado ya se encuentra en la lista.\tElija una Opcion:\n\n\t1-Modificar dicho registro\n\t2-Ingresar otro DNI\n\t3-Volver al Menu\n"); printf("\n\tIngresar el nro: "); scanf("%d",&op2); } }while(op2==2); if(op2==1) { return(primero); } else { if(op2==3) { return(primero); } } if(band!=1) { printf("Ingresar el Apellido: "); fflush(stdin); gets(aux->pers.apellido); printf("Ingresar el Nombre: "); fflush(stdin); gets(aux->pers.nombre); printf("Ingresar la edad: "); scanf("%d",&aux->pers.edad); } if(b==primero) { aux->sig=primero; if(primero!=NULL){ primero->ant=aux; } primero=aux; } else { aux->sig=b; if(b!=NULL){ b->ant=aux; } a->sig=aux; aux->ant=a; } return(primero); }
los imprimi...
Código
void printlistdouble(struct listaenlazada *primero) { struct listaenlazada *a,*b; a=primero; // clrscr(); printf("Se recorre desde el primero de la lista hasta el ultimo\n"); while(a) { printf("Dni:%d\nApellido:%s\nNombre:%s\nEdad:%d\n\n",a->pers.dni,a->pers.apellido,a->pers.nombre,a->pers.edad); b=a; a=a->sig; } printf("Se recorre desde el ultimo de la lista hasta el primero\n"); while(b) { printf("Dni:%d\nApellido:%s\nNombre:%s\nEdad:%d\n\n",b->pers.dni,b->pers.apellido,b->pers.nombre,b->pers.edad); b=b->ant; } printf("\n\tPresione cualquier tecla para terminar... "); getch(); }
es lo que llegue a hacer hasta el momento lo anterior no me parecio complicado, pero con lo de listas enlazadas se me hizo una laguna..
Gracias camaradas!!!!