ejemplo de listas circulares en C
By: a guest | Mar 17th, 2010 | Syntax:
C++ | Size: 3.37 KB | Hits: 459 | 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);
if(cab==NULL)
{
cab=nuevo;
nuevo->sig=cab;
ult=cab;
}
else
{
nuevo->sig=cab;
cab=nuevo;
ult->sig=cab;
}
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);
if(cab==NULL)
{
cab=nuevo;
nuevo->sig=cab;
ult=cab;
}
else
{
ult->sig=nuevo;
ult=nuevo;
ult->sig=cab;
}
printf("\ndesea agregar otro numero? s/n: ");
fflush(stdin);
scanf("%c",&resp);
}
}
void mostrar()
{
nodo *ptr;
int valido=0;
ptr=cab;
while(valido!=1)
{
if(ptr==ult)
{
valido=1;
}
printf("%d",ptr->num);
ptr=ptr->sig;
}
getch();
}
void del()
{
nodo *ptr;
nodo *pkr;
nodo *aux=NULL;
int num, y=0, valido=0, vali2=0, vali3=0;
ptr=cab;
pkr=cab;
printf("\ningrese el numero a borrar: ");
scanf("%d",&num);
while(valido!=1)
{
if(ptr==ult)
{
valido=1;
}
if(num==ptr->num)
{
aux=ptr;
y=1;
}
if((ptr==cab)&&(y==1))
{
cab=ptr->sig;
ult->sig=cab;
y=0;
}
else if((ptr==ult)&&(y==1))
{
while(vali2!=1)
{
if(pkr==ult)
{
vali2=1;
}
if(pkr->sig==aux)
{
ult=pkr;
ult->sig=cab;
y=0;
}
pkr=pkr->sig;
}
}
else if(y==1)
{
while(vali3!=1)
{
if(pkr==ult)
{
vali3=1;
}
if(pkr->sig==aux)
{
pkr->sig=aux->sig;
y=0;
}
pkr=pkr->sig;
}
}
ptr=ptr->sig;
}
}
void antes()
{
nodo *nuevo, *ptr, *pkr, *aux;
int num, y=0, valido=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(valido!=1)
{
if(ptr==ult)
{
valido=1;
}
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, valido=0;
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(valido!=1)
{
if(ptr==ult)
{
valido=1;
}
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);
}
}