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

problemas con lista enlazada doble

Estas en el tema de problemas con lista enlazada doble en el foro de C/C++ en Foros del Web. bueno tengo un problema en mi codigo ya k puedo agregar solo un elemento y cuando ingreso dos o mas datos kedan pendientes y lo ...
  #1 (permalink)  
Antiguo 10/06/2008, 13:03
 
Fecha de Ingreso: julio-2007
Mensajes: 1
Antigüedad: 16 años, 9 meses
Puntos: 0
Pregunta problemas con lista enlazada doble

bueno tengo un problema en mi codigo ya k puedo agregar solo un elemento
y cuando ingreso dos o mas datos kedan pendientes y lo agrega despues cuando vuelvo a ejecutar esa funcion(agregar). me gustaria k me aclararan mi duda y k podria hacer para agregar un solo dato o poder guardar frases y no me la agregae una por una. Aqui les dejo mi codigo:

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
char op;
char n;
struct lista_doble
{
struct lista_doble *ant;
struct lista_doble *sgte;
int dato;
};
typedef struct lista_doble ld;
ld *primero,*ultimo;

void ingresar(char);
void imprimir(void);
void imprimir_r(void);
void eliminar_p(void);
void eliminar_u(void);

void main()
{
clrscr(); textcolor(GREEN);textbackground(BLACK);
do
{
clrscr();
gotoxy(25,1);printf("**Menu Principal**");
gotoxy(6,9);printf("LISTA ENLAZADA \n\tDOBLE");
gotoxy(25,3);printf("1. ingresar ");
gotoxy(25,5);printf("2. imprimir ");
gotoxy(25,7);printf("3. imprimir al reves");
gotoxy(25,9);printf("4. eliminar primero ");
gotoxy(25,11);printf("5. eliminar ultimo");
gotoxy(25,13);printf("6. salir ");
gotoxy(25,17);printf(" elija opcion ");
scanf("%c",&op);

if(op=='1')
{clrscr();
gotoxy(25,9);printf("ingrese valor para agregar ");
//gets (n);fflush(stdin);
cin >> n;
ingresar(n);
gotoxy(25,11);printf("presione una tecla para volver ");
getch();
main();
}
else if(op=='2')
{clrscr();
gotoxy(25,7);imprimir();
gotoxy(25,10);printf("Presione una Tecla para regresar");
getch();
main();
}
else if(op=='3')
{clrscr();
gotoxy(25,7);imprimir_r();
gotoxy(25,10);printf("Presione una Tecla para Regresar");
getch();
main();
}
else if(op=='4')
{clrscr();
eliminar_p();
gotoxy(25,10);printf("presione una tecla para Regresar");
getch();
main();

}
else if(op=='5')
{
clrscr();
eliminar_u();
gotoxy(25,10);printf("Presione una tecla para Regresar");
getch();
main();

}

}while(op!='6');

}
void ingresar(char n)
{clrscr();

ld *p;
p=(ld*) malloc(sizeof(ld));
p->dato=n;
if(primero==NULL)
{
p->ant=NULL;
p->sgte=NULL;
primero=p;
ultimo=p; }
else

{
ultimo->sgte=p;
p->ant=ultimo;
p->sgte=NULL;
ultimo=p;}

}
void imprimir()
{ld *p;
if(primero==NULL)
printf("la lista esta vacia");
else
{
p=primero;
while(p!=NULL)
{
printf("\n%c",p->dato);
p=p->sgte;
}
}
}
void imprimir_r()
{
ld *p;
if(ultimo==NULL)
printf("\t\t\n\t\t\tLista Vacia");
else
{
p=ultimo;
while(p!=NULL)

{ printf("\n%c",p->dato);
p=p->ant;

}
}
}
void eliminar_p()

{

ld *p,*s,*m;
p=primero;

while(m->sgte!=NULL)
{
m=m->sgte;
}
if(primero==NULL)
printf("\t\t\nLista Vacia");
else
if(p->sgte==NULL)

{free(p);
primero=NULL;
ultimo=NULL;
printf("Operacion Realizada");
}
else
{
s=primero->sgte;
free(p);
primero=s;
s->ant=NULL;
ultimo->sgte=NULL;
printf("Operacion Realizada");
}
getch();
}

void eliminar_u()
{

ld *r,*m,*n;
r=ultimo;
while(m->ant!=NULL)
{
m=m->ant;
}
if(r==NULL)
printf("Lista Vacia");
else
if(r->ant==NULL)
{free(r);
primero=NULL;
ultimo=NULL;
printf("operacion realizada");
}

else
{n=ultimo->ant;
free(r);
ultimo=n;
n->sgte=NULL;
primero->ant=NULL;
printf("operacion realizada");
}
getch();
}
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 19:24.