ejemplo de listas simples en C
By: a guest | Mar 17th, 2010 | Syntax:
C++ | Size: 2.96 KB | Hits: 375 | Expires: Never
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct lista
{
int num;
struct lista *sig;
};
typedef struct lista nodo;
void inicio();
void final();
void mostrar();
void del();
void antes();
void despues();
nodo *cab=NULL;
nodo *ult=NULL;
void main()
{
int opc=0;
while(opc!=7)
{
clrscr();
printf("MENU\n1.- ingresar al inicio\n2.- ingresar al final\n3.- insertar antes\n4.- insertar despues\n5.- imprimir\n6.- eliminar\n7.- salir\ningrese su opcion: ");
scanf("%d",&opc);
switch(opc)
{
case 1:
inicio();
break;
case 2:
final();
break;
case 3:
antes();
break;
case 4:
despues();
break;
case 5:
mostrar();
break;
case 6:
del();
break;
}
}
}
void inicio()
{
nodo *nuevo;
char resp='s';
while(resp!='n')
{
nuevo=((nodo*)malloc(sizeof(nodo)));
printf("\ningrese el nuevo numero: ");
scanf("%d",&nuevo->num);
nuevo->sig=cab;
cab=nuevo;
if(ult==NULL)
{
ult=nuevo;
}
printf("\ndesea agregar otro numero? s/n: ");
fflush(stdin);
scanf("%c",&resp);
}
}
void final()
{
nodo *nuevo;
char resp='s';
while(resp!='n')
{
nuevo=((nodo*)malloc(sizeof(nodo)));
printf("\ningrese el nuevo numero: ");
scanf("%d",&nuevo->num);
nuevo->sig=NULL;
ult->sig=nuevo;
ult=nuevo;
if(cab==NULL)
{
cab=nuevo;
}
printf("\ndesea agregar otro numero? s/n: ");
fflush(stdin);
scanf("%c",&resp);
}
return;
}
void mostrar()
{
nodo *ptr;
ptr=cab;
while(ptr)
{
printf(" %d ",ptr->num);
ptr=ptr->sig;
}
getch();
return;
}
void del()
{
nodo *ptr;
nodo *pkr;
nodo *aux=NULL;
int num, y=0, x=0;
ptr=cab;
pkr=cab;
printf("\ningrese el numero a borrar: ");
scanf("%d",&num);
while(ptr)
{
if(num==ptr->num)
{
aux=ptr;
y=1;
}
while(y==1)
{
if(aux==cab)
{
cab=aux->sig;
x=1;
y=0;
printf("\nNUMERO ELIMINADO");
getch();
}
if((pkr->sig==aux)&&(x==0))
{
pkr->sig=aux->sig;
printf("\nNUMERO ELIMINADO");
getch();
y=0;
}
pkr=pkr->sig;
}
ptr=ptr->sig;
}
}
void antes()
{
nodo *nuevo, *ptr, *pkr, *aux;
int num, y=0;
char resp='s';
ptr=cab;
pkr=cab;
while(resp!='n')
{
nuevo=((nodo*)malloc(sizeof(nodo)));
printf("\ningrese el nuevo numero: ");
scanf("%d",&nuevo->num);
printf("\nantes de quien quiere ingresar? INGRESE EL NUMERO: ");
scanf("%d",&num);
while(ptr)
{
if(num==ptr->num)
{
aux=ptr;
y=1;
}
while(y==1)
{
if(pkr->sig==aux)
{
pkr->sig=nuevo;
nuevo->sig=aux;
y=0;
}
pkr=pkr->sig;
}
ptr=ptr->sig;
}
printf("\ndesea agregar otro numero? s/n: ");
fflush(stdin);
scanf("%c",&resp);
}
}
void despues()
{
nodo *ptr, *nuevo;
ptr=cab;
char resp='s';
int num;
while(resp!='n')
{
nuevo=((nodo*)malloc(sizeof(nodo)));
printf("\ningrese el nuevo numero: ");
scanf("%d",&nuevo->num);
printf("\ndespues de quien quiere ingresar? INGRESE EL NUMERO: ");
scanf("%d",&num);
while(ptr)
{
if(num==ptr->num)
{
nuevo->sig=ptr->sig;
ptr->sig=nuevo;
}
ptr=ptr->sig;
}
printf("\ndesea agregar otro numero? s/n: ");
fflush(stdin);
scanf("%c",&resp);
}
}