[C con Clase] Como eliminar un nodo de una lista
Jose Cabrera
josmaca en gmail.com
Mar Abr 20 07:42:03 CEST 2010
Necesitas crear dos punteros, uno apuntando al que quieres borrar y otro al
anterior a este, primero lees el sig del que vas a borrar y modificas el sig
del anterior al que vas a borrar con el que has leído, de esta forma el que
borras esta fuera de la lista y ya puedes borrarlo.
El 20 de abril de 2010 00:43, Cristian David Villota Jacome <
cristian.vj23 en hotmail.com> escribió:
> Hola Amigos:
>
> Estoy programando una estructura de datos, bueno una lista con nodos que
> solicitan nombre y telefono; bueno he podido agregar nodos y mostrar en
> pantalla los que tengo pero no puedo eliminar un nodo, si alguien me puede
> ayuar con el algoritmo para hacerlo lo agradezco de antemano.
>
>
> #include<stdio.h>
> #include<conio.h>
> #include<stdlib.h>
>
>
> struct agenda
> {
> char nom[20];
> char tel[12];
> struct agenda*sig;
> };
>
>
>
> struct agenda*primero,*ultimo;
>
>
>
>
> void mostrar_menu()
> {
> printf("\n\n\t\tMENé");
> printf("\n\n\t1.A¤adir Elemento");
> printf("\n\t2.Borrar Elemento");
> printf("\n\t3.Mostrar Lista");
> printf("\n\t4.Salir");
>
> printf("\n\n\n\tElige una opci¢n: ");
> fflush(stdout);
> }
>
>
>
> void anadir_elemento()
> {
> struct agenda*nuevo;
> nuevo=(struct agenda*)malloc(sizeof(struct agenda));
>
> if(nuevo==NULL)
> {
> printf("NO HAY MEMORIA DISPONIBLE");
> }
>
> printf("\nNuevo Elemento\n");
>
>
> printf("Nombre: ");
> fflush(stdout);
> gets(nuevo->nom);
>
> printf("\nTelefono: ");
> fflush(stdout);
> gets(nuevo->tel);
>
> nuevo->sig=NULL;
>
> if(primero==NULL)
> {
> printf("\nPrimer Elemento\n");
> primero=nuevo;
> ultimo=nuevo;
> }
> else
> {
> ultimo->sig=nuevo;
> ultimo=nuevo;
> }
> getch();
> clrscr();
> }
>
>
>
>
>
> ///////////////////////
>
>
>
>
>
> void mostrar_lista()
> {
> struct agenda*auxiliar;
> int i;
> i=0;
> auxiliar=primero;
> printf("\n\nMostrando lista completa\n");
>
> while(auxiliar!=NULL)
> {
> printf("Nombre: %s, Telefono: %s\n",auxiliar->nom,auxiliar->tel);
> auxiliar=auxiliar->sig;
> i++;
> }
> if(i==0)
> {
> printf("\n\nLista vacia\n");
> }
> getch();
> clrscr();
> }
>
>
>
>
>
> void main()
> {
> clrscr();
> char op;
>
> primero=(struct agenda*)NULL;
> ultimo=(struct agenda*)NULL;
>
> do{mostrar_menu();op=getch();
>
> switch(op)
> {
> case '1': anadir_elemento();
> break;
>
> case '2': printf("\n No disponible....\n");
> break;
>
> case '3': mostrar_lista();
> break;
>
> case '4': exit(1);
>
> default: printf("opcion no valida\n");
> break;
> }
> }while(op!='4');
>
>
> getch();
> }
>
>
>
>
> ------------------------------
> Get news, entertainment and everything you care about at Live.com. Check
> it out! <http://www.live.com/getstarted.aspx>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100420/c6644508/attachment.html>
Más información sobre la lista de distribución Cconclase