Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ayuda en lista simpl. enlazada!!!

Estas en el tema de ayuda en lista simpl. enlazada!!! en el foro de C/C++ en Foros del Web. hola amigos del foro, quisiera que me ayuden con la funcion de borrar de la siguiente lista enlazada, lo que pasa es que no me ...
  #1 (permalink)  
Antiguo 03/11/2010, 11:26
 
Fecha de Ingreso: octubre-2010
Mensajes: 11
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta ayuda en lista simpl. enlazada!!!

hola amigos del foro, quisiera que me ayuden con la funcion de borrar de la siguiente lista enlazada, lo que pasa es que no me borra...
les dejo el codigo, gracias de antemano

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <alloc.h>
#include <string.h>

typedef struct nodo {
char nom[20];
char ape[30];
char dni[9];
char tel[9];
nodo *sig;
}nodo;

void mostrar_menu();
void anadir_cliente();
void buscar_cliente();
void mostrar_lista();
void borrar_cliente();
void modificar_cliente();

nodo *primero, *ultimo,*u,*aux;


void main()
{
char opcion;
primero = (nodo *) NULL;
ultimo = (nodo *) NULL;
do{
mostrar_menu();
opcion = getch();
switch ( opcion )
{
case '1': anadir_cliente(); break;
case '2': modificar_cliente(); break;
case '3': borrar_cliente(); break;
case '4': mostrar_lista(); break;
case '5': buscar_cliente(); break;
case '6': exit(1);
default: clrscr();
gotoxy(3,25),printf("\a[!] Opcion invalida\n" ); break;
}
}while(opcion!='6');
}


void mostrar_menu()
{

gotoxy(25,2),printf("PROGRAMA DE REGISTRO DE CLIENTES\n");
gotoxy(3,3),printf("============================== =============================================\n");
gotoxy(3,4),printf("MENU\n");
gotoxy(3,6),printf("(1) Agregar nuevo cliente\n");
gotoxy(3,8),printf("(2) Modificar datos del cliente\n");
gotoxy(3,10),printf("(3) Eliminar cliente\n");
gotoxy(3,12),printf("(4) Mostrar lista de clientes\n");
gotoxy(3,14),printf("(5) Buscar cliente por dni\n");
gotoxy(3,16),printf("(6) Salir al sistema\n\n");
gotoxy(3,18),printf("============================= ==============================================\n") ;
gotoxy(3,20),printf("Ingrese opcion: ");fflush(stdin);

}

void anadir_cliente()
{
nodo *nuevo;
nuevo = (nodo *) malloc (sizeof(nodo));
clrscr();
if (nuevo==NULL)
printf("No hay memoria disponible\n");
else
{
printf("AGREGAR NUEVO CLIENTE\n");
printf("========================================== =================================\n");
printf("Nombre: "); fflush(stdin);
gets(nuevo->nom);
printf("Apellido: "); fflush(stdin);
gets(nuevo->ape);
printf("DNI: "); fflush(stdin);
gets(nuevo->dni);
printf("Teléfono: "); fflush(stdin);
gets(nuevo->tel);
nuevo->sig = NULL;
if (primero==NULL)
{
printf("========================================== =================================");
printf("\n[!] Cliente añadido satisfactoriamente\n");
primero = nuevo;
ultimo = nuevo;
}
else
{
printf("========================================== =================================");
printf("\n[!] Cliente añadido satisfactoriamente\n");
ultimo -> sig = nuevo;
ultimo = nuevo;
}
}
printf("========================================== =================================\n");
printf("\n Presione una tecla para continuar\n");
getch();
clrscr();
}

void mostrar_lista()
{
nodo *auxiliar;
int i;
i=0;
auxiliar = primero;
clrscr();
printf("MOSTRAR LISTA DE CLIENTES\n");
printf("========================================== =================================\n");
printf("Nº ");
printf("Nombre\t\t");
printf("Apellido\t\t");
printf("DNI\t\t");
printf("Telefono\t \n");
while (auxiliar!=NULL)
{
gotoxy(1,5+i),printf("%d\t",i+1);
gotoxy(7,5+i),printf("%s\t\t",auxiliar->nom);
gotoxy(25,5+i),printf("%s\t\t",auxiliar->ape);
gotoxy(49,5+i),printf("%s\t",auxiliar->dni);
gotoxy(65,5+i),printf("%s\t\n",auxiliar->tel);
auxiliar = auxiliar->sig;
i++;
}
if (i==0)
{
printf("========================================== =================================");
printf("\n[!] No hay clientes\n");
}
else
{
if (i>=0)
{
printf("========================================== =================================");
printf("\n[!] Numero de clientes: %d\n",i);
}
}
printf("========================================== =================================\n");
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}

void buscar_cliente()
{
char dniop[9];
int i;
i=0;
nodo* inicio;
nodo* aux;
inicio = primero;
clrscr();
printf("BUSCAR CLIENTE POR DNI\n");
printf("========================================== =================================\n");
printf("Ingrese DNI del cliente a buscar: ");
scanf("%s", &dniop);
for (aux = inicio; aux!=NULL; aux=aux->sig)
if (strcmp(aux->dni,dniop)==0)
{
printf("\nNombre : %s\n", aux -> nom);
printf("Apellido : %s\n", aux -> ape);
printf("DNI : %s\n", aux -> dni);
printf("Telefono : %s\n", aux -> tel);
i++;
}
printf("========================================== =================================");
printf("\n[!] Clientes encontrados: %d\n",i);
printf("========================================== =================================\n");
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}

void borrar_cliente()
{
char dniop[9];
nodo* inicio;
nodo* aux;
nodo* ant;
inicio = primero;
clrscr();
printf("BORRAR CLIENTE POR DNI\n");
printf("========================================== =================================\n");
printf("Ingrese DNI del cliente a borrar: ");
scanf("%s", &dniop);
ant = NULL;
for (aux = inicio; aux!=NULL; aux=aux->sig)
if (strcmp(aux->dni,dniop)==0)
{
if (ant != NULL) // Me fijo que ant no sea nulo. Indica si estoy o no en el primer elemento.
ant->sig = aux -> sig;
else
inicio = aux->sig; // En este caso borro el primer elemento por lo que tengo que modificar el primero.
free(aux);
}
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}

void modificar_cliente()
{
int band=1;
char modifica[20],opc;
u=primero;
clrscr();
printf("MODIFICAR DATOS DEL CLIENTE\n");
printf("========================================== =================================\n");
printf("(1) Modificar nombre\n");
printf("(2) Modificar apellido\n");
printf("(3) Modificar DNI\n");
printf("(4) Modificar telefono\n\n");
printf("========================================== =================================\n");
printf("Ingrese opcion: ");
opc = getch();
switch ( opc )
{
case '1':
printf("\nIngrese nombre a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->nom)==0){
printf("\Ingrese reemplazo: ");
gets(u->nom);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro nombre a modificar\n");
printf("========================================== =================================\n");
}
break;
case '2':
printf("\nIngrese apellido a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->ape)==0){
printf("\Ingrese reemplazo: ");
gets(u->ape);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro apellido a modificar\n");
printf("========================================== =================================\n");
}
break;
case '3':
printf("\nIngrese DNI a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->dni)==0){
printf("\Ingrese reemplazo: ");
gets(u->dni);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro DNI a modificar\n");
printf("========================================== =================================\n");
}
break;
case '4':
printf("\nIngrese telefono a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->tel)==0){
printf("\Ingrese reemplazo: ");
gets(u->tel);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro telefono a modificar\n");
printf("========================================== =================================\n");
}
break;
}
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}
  #2 (permalink)  
Antiguo 03/11/2010, 11:58
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: ayuda en lista simpl. enlazada!!!

Si mal no recuerdo ya te habia pasado la solucion, Estas dejaste mis comentarios.Fijate que te olvidaste unas cosas en el for. El que matiene el contro lde la variable ant.

for (aux = inicio; aux!=NULL; ant= aux,aux=aux->sig)
  #3 (permalink)  
Antiguo 05/11/2010, 06:36
 
Fecha de Ingreso: octubre-2010
Mensajes: 11
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ayuda en lista simpl. enlazada!!!

hola amigo, si. Lo que pasa es que reabri el tema porque al modificar lo que me pusiste en el codigo anterior no funciono, no me borraba igual... espero que lo analices de nuevo porfa para esperar tu respuesta

Etiquetas: enlazada, lista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:24.