-
-
Save jofese/7e64ffb756891b637dfa to your computer and use it in GitHub Desktop.
/* | |
Autor: Joel Fernandez | |
Curso: Estructura de Datos | |
Ejercicio: IMPLEMENTACION DE UNA LISTA CIRCULAR | |
Descripcion: funciones inserta, elimina, busca y elimina | |
IDE: CodeBlocks | |
Pagina Web: http://codebotic.blogspot.com | |
*/ | |
#include <iostream> | |
#include <cstdlib> | |
using namespace std; | |
struct nodo{ | |
int nro; //los datos seran de tipo entero | |
struct nodo *sgte; //puntero | |
}; | |
typedef struct nodo;//definimos a nodo como un tipo de variable | |
nodo *fin;//puntero que ira siempre al final de la lista | |
nodo *lista;//puntero que para nosotros apuntara a la cabeza de nuestra lista | |
void menu1(); //declaramos las funciones a usar | |
void insertarInicio(); | |
void insertarFinal(); | |
void mostrar(); | |
void buscarElemento(); | |
void eliminarElemento(); | |
void eliminarElementos(); | |
/* Funcion Principal | |
---------------------------------------------------------------------*/ | |
int main(void) | |
{ | |
lista = NULL; | |
int op; // opcion del menu | |
system("color 0a"); | |
do | |
{ | |
menu1(); | |
cin>>op; | |
switch(op) | |
{ | |
case 1: | |
insertarInicio(); | |
break; | |
case 2: | |
insertarFinal(); | |
break; | |
case 3: | |
cout<<"\n\n Lista Circular \n\n"; | |
mostrar(); | |
break; | |
case 4: | |
buscarElemento(); | |
break; | |
case 5: | |
eliminarElemento(); | |
break; | |
case 6: | |
eliminarElementos(); | |
break; | |
default: cout<<"OPCION NO VALIDA...!!!"; | |
break; | |
} | |
cout<<endl<<endl; | |
system("pause"); system("cls"); | |
}while(op!=7); | |
return 0; | |
} | |
//////////////////////MOSTRAR MENU/////////////////////////////// | |
void menu1() | |
{ | |
cout<<"\n\t\tLISTA ENLAZADA CIRCULAR\n\n"; | |
cout<<" 1. INSERTAR AL INICIO "<<endl; | |
cout<<" 2. INSERTAR AL FINAL "<<endl; | |
cout<<" 3. REPORTAR LISTA "<<endl; | |
cout<<" 4. BUSCAR ELEMENTO "<<endl; | |
cout<<" 5. ELIMINAR ELEMENTO 'V' "<<endl; | |
cout<<" 6. ELIMINAR ELEMENTOS CON VALOR 'V' "<<endl; | |
cout<<" 7. SALIR "<<endl; | |
cout<<"\n INGRESE OPCION: "; | |
} | |
//////////////////////INSERTAR AL INICIO////////////////////////// | |
void insertarInicio() | |
{ | |
nodo *nuevo; | |
nuevo=new struct nodo; | |
cout<<"\n***INSERTA AL INICIO*****\n"; | |
cout<<"\nINGRESE DATO:"; | |
cin>>nuevo->nro; | |
nuevo->sgte=NULL; | |
if(lista==NULL) | |
{ | |
cout<<"PRIMER ELEMENTO..!!!"; | |
lista=nuevo; | |
lista->sgte=lista; | |
fin=nuevo; | |
} | |
else | |
{ | |
nuevo->sgte = lista; | |
lista = nuevo; | |
fin->sgte = lista; | |
} | |
} | |
//////////////////INSERTAR AL FINAL///////////////////// | |
void insertarFinal() | |
{ | |
nodo *nuevo; | |
nuevo=new struct nodo; | |
cout<<"\n***INSERTA AL INICIO*****\n"; | |
cout<<"\nINGRESE DATO:"; | |
cin>>nuevo->nro; | |
nuevo->sgte=NULL; | |
if(lista==NULL) | |
{ | |
cout<<"PRIMER ELEMENTO..!!!"; | |
lista=nuevo; | |
lista->sgte=lista; | |
fin=nuevo; | |
} | |
else | |
{ | |
fin->sgte = nuevo; | |
nuevo->sgte = lista; | |
fin = nuevo; | |
} | |
} | |
//////////////////MOSTRAR TODOS LOS DATOS//////////////////////// | |
void mostrar() | |
{ nodo *aux; | |
aux=lista; | |
int i=1; | |
if(lista!=NULL) | |
{ | |
do | |
{ cout<<" "<<aux->nro; | |
aux = aux->sgte; | |
i++; | |
}while(aux!=lista); | |
} | |
else | |
cout<<"\n\n\tLista vacia...!"<<endl; | |
} | |
//////////////////BUSCAR ELEMENTO/////////////////////// | |
void buscarElemento() //esta funcion muestra la posicion del primer dato coincidente | |
//encontrado en la lista | |
{ | |
nodo *aux; | |
int i = 1, valor , flag = 0; | |
cout<<"\nINGRESE ELEMENTO A BUSCAR:"; | |
cin>>valor; | |
if(lista !=NULL) | |
{ | |
aux = lista; | |
do | |
{ | |
if(aux->nro == valor) | |
{ | |
cout<<"\n\n Encontrado en posicion "<< i <<endl; | |
flag=1; | |
} | |
else | |
{ | |
aux = aux->sgte; | |
i++; | |
} | |
}while(aux!=lista); | |
if(flag==0) cout<<"\n\n\tNumero no econtrado..!"<<endl; | |
} | |
else | |
cout<<"\n\n\tLista vacia...!"<<endl; | |
} | |
////////////////ELIMINAR ELEMENTO DETERMINADO////////////////////// | |
void eliminarElemento() | |
{ | |
nodo *aux, *r, *q; | |
int i = 1, flag = 0,valor; | |
cout<<"\n INGRESE ELEMENTO A ELIMINAR:"; | |
cin>>valor; | |
if(lista !=NULL) | |
{ | |
aux = lista; | |
do | |
{ | |
if(aux->nro == valor) | |
{ | |
if(aux==lista)//si es que el dato a eliminar es el primero | |
{ r=lista; | |
lista=lista->sgte; | |
aux=aux->sgte; | |
fin->sgte=lista; | |
r->sgte=NULL; | |
if(fin->sgte==NULL) | |
{ | |
lista==NULL; | |
aux==NULL; | |
delete(r); | |
cout<<"\nELEMENTO ELIMINADO...!!!\n"; | |
return; | |
} | |
else | |
{ | |
delete(r); | |
cout<<"\nELEMENTO ELIMINADO...!!!\n"; | |
return; | |
} | |
} | |
else | |
{ | |
if(aux==fin)//si es que el dato a eliminar es al que apunta a fin | |
{ | |
r=aux; | |
aux=aux->sgte; | |
q->sgte=aux; | |
fin=q; | |
r->sgte=NULL; | |
delete(r); | |
cout<<"\nELEMENTO ELIMINADO...!!!\n"; | |
return; | |
} | |
else | |
{ | |
r=aux; | |
aux=aux->sgte; | |
q->sgte=aux; | |
r->sgte=NULL; | |
delete(r); | |
cout<<"\nELEMENTO ELIMINADO...!!!\n"; | |
return; | |
} | |
} | |
flag=1; | |
} | |
else | |
{ q=aux; | |
aux = aux->sgte; | |
i++; | |
} | |
}while(aux!=lista); | |
if(flag==0) | |
cout<<"\n\n\tNumero no econtrado..!"<<endl; | |
} | |
else | |
cout<<"LISTA VACIA...!!!!"; | |
} | |
//////////////////////ELIMINAR REPETIDOS///////////////////// | |
void eliminarElementos() | |
{ | |
nodo *aux, *r, *q; | |
int flag = 0,valor; | |
cout<<"\n DATO REPETIDO A ELIMINAR:"; | |
cin>>valor; | |
if(lista !=NULL) | |
{ aux=lista; | |
while(aux->nro==valor)//si los primeros elementos son repetidos | |
if(aux==lista) //esta funcion borra a estos | |
{ | |
r=lista; | |
aux=lista->sgte; | |
lista=lista->sgte; | |
fin->sgte=lista; | |
r->sgte=NULL; | |
if(fin->sgte==NULL) | |
{ | |
lista==NULL; | |
aux==NULL; | |
delete(r); | |
flag=1; | |
} | |
else | |
{ | |
delete(r); | |
flag=1; | |
} | |
} | |
do | |
{ | |
if(aux->nro == valor) | |
{ | |
while(aux==lista) | |
{ | |
r=lista; | |
aux=lista->sgte; | |
lista=lista->sgte; | |
fin->sgte=lista; | |
r->sgte=NULL; | |
if(fin->sgte==NULL) | |
{ | |
lista==NULL; | |
aux==NULL; | |
delete(r); | |
} | |
else | |
delete(r); | |
} | |
if(aux==fin)//para si el elemento a borrar es apuntado por *fin | |
{ | |
r=aux; | |
aux=aux->sgte; | |
q->sgte=aux; | |
fin=q; | |
r->sgte=NULL; | |
delete(r); | |
} | |
else | |
{ | |
r=aux; | |
aux=aux->sgte; | |
q->sgte=aux; | |
r->sgte=NULL; | |
delete(r); | |
} | |
flag=1; | |
} | |
else | |
{ q=aux; | |
aux = aux->sgte; | |
} | |
}while(aux!=lista); | |
if(flag==0) | |
cout<<"\n\n\tNumero no econtrado..!"<<endl; | |
} | |
else | |
cout<<"LISTA VACIA...!!!!"; | |
} |
amigo tienes un pequeño erro en la parte de buscar elemento, ya que queda en un bucle se soluciona muy facilmente
void buscarElemento() //esta funcion muestra la posicion del primer dato coincidente
//encontrado en la lista
{
nodo *aux;
int i = 1, valor , flag = 0;
cout<<"\nINGRESE ELEMENTO A BUSCAR:";
cin>>valor;
if(lista !=NULL)
{
aux = lista;
do
{
if(aux->nro == valor)
{
cout<<"\n\n Encontrado en posicion "<< i <<endl;
flag=1;
}
else
{
aux = aux->sgte;
i++;
}
}while(aux!=lista);
if(flag==0) cout<<"\n\n\tNumero no econtrado..!"<<endl;
}
else
cout<<"\n\n\tLista vacia...!"<<endl;
}
lo tenias asi y la solucion es q cuando consiga el valor buscado sigua asignandole a aux el siguiente nodo
void buscarElemento() //esta funcion muestra la posicion del primer dato coincidente
//encontrado en la lista
{
nodo *aux;
int i = 1, valor , flag = 0;
cout<<"\nINGRESE ELEMENTO A BUSCAR:";
cin>>valor;
if(lista !=NULL)
{
aux = lista;
do
{
if(aux->nro == valor)
{
cout<<"\n\n Encontrado en posicion "<< i <<endl;
flag=1;
aux = aux->sgte;
i++;
}
else
{
aux = aux->sgte;
i++;
}
}while(aux!=lista);
if(flag==0) cout<<"\n\n\tNumero no econtrado..!"<<endl;
}
else
cout<<"\n\n\tLista vacia...!"<<endl;
}
de esta manera pero de resto esta MUY MUY bien tu codigo y mil gracias
buenas tardes me podran ayudar con este codigo me marca muchos errores y me faltan algunos elementos para agregar
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
struct datos
{
int num;
char ultimo;
struct datos *liga;
};
typedef struct datos nodo;
void *creamemoria(int n);
void recorrecursivo(nodo *p);
void recorreiterativo(nodo *p);
nodo *creanodo();
nodo *creainicio();
nodo *creafinal(nodo *p);
nodo *insertarinicio();
nodo *insertarfinal();
nodo *insertarantes();
nodo *insertardespues();
nodo *liberamemoria(nodo *p);
nodo *eliminaprimero(nodo *p);
nodo *eliminaultimo(nodo *p);
nodo *eliminanodox(nodo *p);
nodo *eliminanodoanterior(nodo *p);
nodo *busquedadesordenada(nodo *p);
void recorrecursivo(nodo *p);
void recorreiterativo(nodo *p);
nodo *creainiciolc();
nodo *creafinallc();
nodo *insertariniciolc();
nodo *insertarfinallc();
nodo *insertaranteslc();
nodo *insertardespueslc();
nodo *liberamemorialc(nodo *p);
nodo *eliminaprimerolc(nodo *p);
nodo *eliminaultimolc(nodo *p);
nodo *eliminanodoxlc(nodo *p);
nodo *eliminanodoanteriorlc(nodo *p);
nodo *busquedadesordenadalc(nodo *p);
int main()
{
nodo *q, *t, *p = NULL, *u;
int dat, i, ref, x;
char opcion1, opcion2, opcion3, opcion4, s = 'z', w = 'z', v = 'z', l = 'z', y = 'z';
while (w == 'z')
{
system ("CLS");
printf ("\n\n\t\t\t MENU DE LISTAS \n\n");
printf ("\n\n\t\t\t [a]. Listas Simplemente Ligadas \n");
printf ("\n\n\t\t\t [b]. Listas Circulares \n");
printf ("\n\n\t\t\t [c]. Listas Doblemente Ligadas \n");
printf ("\n\n\t\t\t [d]. Listas Doblemente Ligadas Circulares\n");
printf ("\n\n\t\t\t [e]. Salir \n\n");
printf ("\n\n\t\t\t Escoja una Opcion: ");
fflush (stdin);
scanf ("%c", &opcion1);
//fflush (stdin);
printf ("\n\n\n");
switch (opcion1)
{
case 'a':
s = 'z';
while (s == 'z')
{
system ("CLS");
printf ("\n\n\t\t\t LISTAS SIMPLEMENTE LIGADAS \n\n");
printf ("\n\n\t\t [a]. Crea Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [b]. Crea Nodo al Final de la Lista \n");
printf ("\n\n\t\t [c]. Insertar Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [d]. Insertar Nodo al Final de la Lista \n");
printf ("\n\n\t\t [e]. Insertar Antes de un Nodo de la Lista \n");
printf ("\n\n\t\t [f]. Insertar Despues de un Nodo de la Lista \n");
printf ("\n\n\t\t [g]. Eliminar el Primer Nodo de la Lista \n");
printf ("\n\n\t\t [h]. Eliminar el Ultimo Nodo de la Lista \n");
printf ("\n\n\t\t [i]. Eliminar un Nodo con Informacion X \n");
printf ("\n\n\t\t [j]. Eliminar el Nodo Anterior al Nodo con Informacion X \n");
printf ("\n\n\t\t [k]. Busqueda en Lista Desordenada \n");
printf ("\n\n\t\t [l]. Recorre Recursivo \n");
printf ("\n\n\t\t [m]. Recorre Iterativo \n");
printf ("\n\n\t\t [n]. Libera la Memoria \n");
printf ("\n\n\t\t [o]. Salir \n\n");
printf ("\n\n\t\t\t Escoja una Opcion: ");
fflush (stdin);
scanf ("%c", &opcion2);
//fflush (stdin);
printf ("\n\n\n");
switch (opcion2)
{
case 'a':
nodo *liberamemoria(nodo *p);
nodo *creainicio();
break;
case 'b':
nodo *creafinalnodo(nodo *p);
break;
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
nodo *eliminaprimero(nodo *p);
break;
case 'h':
nodo *eliminaultimo(nodo *p);
break;
case 'i':
case 'j':
case 'k':
case 'l':
recorrecursivo(p);
getch();
break;
case 'm':
recorreiterativo(p);
getch();
break;
case 'n':
if (p != NULL)
{
p = liberamemoria(p);
p = NULL;
printf ("\n\n\n\t\t\t Memoria Libre !!!");
}
else
printf ("\n\n\n\t\t La lista esta vacia !!!");
getch();
break;
case 'o':
if (p != NULL)
{
p = liberamemoria(p);
p = NULL;
}
s = 'x';
break;
default:
printf ("\n\n\t\t Opcion INVALIDA !!!");
getch();
break;
}
}
break;
case 'b':
v = 'z';
while (v == 'z')
{
system ("CLS");
printf ("\n\n\t\t\t LISTAS CIRCULARES \n\n");
printf ("\n\n\t\t [a]. Crea Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [b]. Crea Nodo al Final de la Lista \n");
printf ("\n\n\t\t [c]. Insertar Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [d]. Insertar Nodo al Final de la Lista \n");
printf ("\n\n\t\t [e]. Insertar Antes de un Nodo de la Lista \n");
printf ("\n\n\t\t [f]. Insertar Despues de un Nodo de la Lista \n");
printf ("\n\n\t\t [g]. Eliminar el Primer Nodo de la Lista \n");
printf ("\n\n\t\t [h]. Eliminar el Ultimo Nodo de la Lista \n");
printf ("\n\n\t\t [i]. Eliminar un Nodo con Informacion X \n");
printf ("\n\n\t\t [j]. Eliminar el Nodo Anterior al Nodo con Informacion X \n");
printf ("\n\n\t\t [k]. Busqueda en Lista Desordenada \n");
printf ("\n\n\t\t [l]. Recorre Recursivo \n");
printf ("\n\n\t\t [m]. Recorre Iterativo \n");
printf ("\n\n\t\t [n]. Libera la Memoria \n");
printf ("\n\n\t\t [o]. Salir \n\n");
printf ("\n\n\t\t\t Escoja una Opcion: ");
scanf ("%c", &opcion3);
fflush (stdin);
printf ("\n\n\n");
switch (opcion3)
{
case 'a':
p = liberamemoria(p);
p = creainicio();
break;
case 'b':
p = liberamemoria(p);
p = creafinal(p);
break;
case 'c':
p = liberamemoria(p);
nodo*insertarinicio();
break;
case 'd':
p = liberamemoria(p);
nodo *insertarfinal();
break;
case 'e':
p = liberamemoria(p);
nodo *insertarantes();
break;
case 'f':
p = liberamemoria(p);
nodo *insertardespues();
break;
case 'g':
nodo *eliminaprimero(nodo *p);
break;
case 'h':
nodo *eliminaultimo(nodo *p);
break;
case 'i':
nodo *eliminanodox(nodo *p);
break;
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
if (p != NULL)
{
p = NULL;
printf ("\n\n\n\t\t\t Memoria Libre !!!");
}
else
printf ("\n\n\n\t\t La lista esta vacia !!!");
getch();
break;
case 'o':
if (p != NULL)
{
}
v = 'x';
break;
default:
printf ("\n\n\t\t Opcion INVALIDA !!!");
getch();
break;
}
}
break;
case 'c':
l = 'z';
while (l == 'z')
{
system ("CLS");
printf ("\n\n\t\t\t LISTAS DOBLEMENTE LIGADAS \n\n");
printf ("\n\n\t\t [a]. Crea Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [b]. Crea Nodo al Final de la Lista \n");
printf ("\n\n\t\t [c]. Insertar Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [d]. Insertar Nodo al Final de la Lista \n");
printf ("\n\n\t\t [e]. Insertar Antes de un Nodo de la Lista \n");
printf ("\n\n\t\t [f]. Insertar Despues de un Nodo de la Lista \n");
printf ("\n\n\t\t [g]. Eliminar el Primer Nodo de la Lista \n");
printf ("\n\n\t\t [h]. Eliminar el Ultimo Nodo de la Lista \n");
printf ("\n\n\t\t [i]. Eliminar un Nodo con Informacion X \n");
printf ("\n\n\t\t [j]. Eliminar el Nodo Anterior al Nodo con Informacion X \n");
printf ("\n\n\t\t [k]. Busqueda en Lista Desordenada \n");
printf ("\n\n\t\t [l]. Recorre Recursivo \n");
printf ("\n\n\t\t [m]. Recorre Iterativo \n");
printf ("\n\n\t\t [n]. Libera la Memoria \n");
printf ("\n\n\t\t [o]. Salir \n\n");
printf ("\n\n\t\t\t Escoja una Opcion: ");
scanf ("%c", &opcion2);
fflush (stdin);
printf ("\n\n\n");
switch (opcion2)
{
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
if (p != NULL)
{
p = NULL;
printf ("\n\n\n\t\t\t Memoria Libre !!!");
}
else
printf ("\n\n\n\t\t La lista esta vacia !!!");
getch();
break;
case 'o':
if (p != NULL)
{
p = NULL;
}
l = 'x';
break;
default:
printf ("\n\n\t\t Opcion INVALIDA !!!");
getch();
break;
}
}
break;
case 'd':
y = 'z';
while (y == 'z')
{
system ("CLS");
printf ("\n\n\t\t\t LISTAS DOBLEMENTE LIGADAS CIRCULARES \n\n");
printf ("\n\n\t\t [a]. Crea Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [b]. Crea Nodo al Final de la Lista \n");
printf ("\n\n\t\t [c]. Insertar Nodo al Inicio de la Lista \n");
printf ("\n\n\t\t [d]. Insertar Nodo al Final de la Lista \n");
printf ("\n\n\t\t [e]. Insertar Antes de un Nodo de la Lista \n");
printf ("\n\n\t\t [f]. Insertar Despues de un Nodo de la Lista \n");
printf ("\n\n\t\t [g]. Eliminar el Primer Nodo de la Lista \n");
printf ("\n\n\t\t [h]. Eliminar el Ultimo Nodo de la Lista \n");
printf ("\n\n\t\t [i]. Eliminar un Nodo con Informacion X \n");
printf ("\n\n\t\t [j]. Eliminar el Nodo Anterior al Nodo con Informacion X \n");
printf ("\n\n\t\t [k]. Busqueda en Lista Desordenada \n");
printf ("\n\n\t\t [l]. Recorre Recursivo \n");
printf ("\n\n\t\t [m]. Recorre Iterativo \n");
printf ("\n\n\t\t [n]. Libera la Memoria \n");
printf ("\n\n\t\t [o]. Salir \n\n");
printf ("\n\n\t\t\t Escoja una Opcion: ");
scanf ("%c", &opcion4);
fflush (stdin);
printf ("\n\n\n");
switch (opcion4)
{
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
if (p != NULL)
{
p = NULL;
printf ("\n\n\n\t\t\t Memoria Libre !!!");
}
else
printf ("\n\n\n\t\t La lista esta vacia !!!");
getch();
break;
case 'o':
if (p != NULL)
{
p = NULL;
}
y = 'x';
break;
default:
printf ("\n\n\t\t Opcion INVALIDA !!!");
getch();
break;
}
}
break;
case 'e':
w = 'x';
break;
default:
printf ("\n\n\t\t Opcion INVALIDA !!!");
getch();
break;
}
}
}
void *creamemoria(int n)
{
int *p;
printf ("\n\n BYTES a reservar: %i", n);
p = (int *) malloc (n);
if (p == NULL)
{
puts ("Lo siento no hay suficiente memoria !!!");
getch();
exit (1);
}
return (p);
}
nodo *creanodo()
{
return (nodo*)creamemoria(sizeof(nodo));
}
void recorrecursivo(nodo *p)
{
if (p != NULL)
{
printf ("[ %d ]", p->num);
if (p->liga != NULL)
printf ("[ %p ] --> ", p->liga);
else
printf ("[ NULL ]");
if (p->liga != NULL)
recorrecursivo(p->liga);
}
else
printf ("\n\n\n\t\t\t La lista esta vacia !!!");
}
void recorreiterativo(nodo *p)
{
nodo *q;
q = p;
if (q != NULL)
{
for (q = p; q != NULL; q = q->liga)
{
printf ("[ %d ]", q->num);
if (q->liga != NULL)
printf ("[ %p ] --> ", q->liga);
else
printf ("[ NULL ]");
}
}
else
printf ("\n\n\t\t La lista esta vacia !!!");
}
nodo *liberamemoria(nodo *p)
{
nodo *q = NULL;
while (p != NULL)
{
q = p;
p = p->liga;
free(q);
}
return (p);
}
nodo *creainicio()
{
int i = 1, num;
nodo *p, *q;
printf ("\n Introduzca el primer valor entero: ");
fflush (stdin);
scanf ("%d", &num);
//fflush (stdin);
if (i == 1)
{
p = creanodo();
p->num = num;
p->liga = NULL;
printf ("\n\n\nNumero: %5d", p->num);
printf ("\nLiga: %p", p->liga);
getch();
do
{
printf ("\n\n\n Introduzca otro valor entero, si desea finalizar entre 99: ");
fflush (stdin);
scanf ("%d", &num);
//fflush (stdin);
i = num;
if (i != 99)
{
q = creanodo();
q->num = num;
q->liga = p;
p = q;
printf ("\n\n\nNumero: %5d", q->num);
printf ("\nLiga: %p", q->liga);
getch();
}
}while (i != 99);
}
return (p);
}
nodo *creafinal(nodo *p)
{
int num;
nodo *q, *nuevo;
q = p;
printf ("\n Introduzca el ultimo valor entero: ");
fflush (stdin);
scanf ("%d", &num);
nuevo = creanodo();
nuevo->num = num;
nuevo->liga = NULL;
while (q ->liga != NULL){
q = q->liga;
}
q->liga = nuevo;
//}
printf ("[ %d ]", num);
printf ("[ %p ] --> ", q->liga);
getch();
return (p);
}
nodo *eliminaprimero(nodo *p){
int c=0,n=0;
nodo *primernodo,*q;
primernodo = p;
if (p != NULL){
recorreiterativo(p);
printf ("\n\n Eliminando primer nodo!! ");
while (primernodo->liga != NULL){
primernodo = primernodo->liga;
c++;
}
if (c == 0){
p = liberamemoria(p);
p = NULL;
printf ("\n\n\t\t La lista esta vacia !!!");
}
else{
//printf ("\n\n %i ",c);
primernodo = p;
q = p;
q = primernodo->liga;
while (q->liga != NULL) {
q = q ->liga;
//printf ("\n\n %i %d %p",c,primernodo->num,primernodo->liga,&primernodo);
//free(primernodo->num);
//free(primernodo->liga);
//free(primernodo);
}
}
printf ("\n\n ");
recorreiterativo(p);
}
else
printf ("\n\n\t\t La lista esta vacia !!!");
getch();
return (p);
}
nodo *eliminaultimo(nodo *p){
int c=0,n=0;
nodo *ultimonodo;
ultimonodo = p;
if (p != NULL){
recorreiterativo(p);
printf ("\n\n Eliminando ultimo nodo!! ");
while (ultimonodo ->liga != NULL){
ultimonodo = ultimonodo->liga;
c++;
}
if (c == 0){
p = liberamemoria(p);
p = NULL;
printf ("\n\n\t\t La lista esta vacia !!!");
}
else{
ultimonodo = p;
while (n < c - 1 ) {
ultimonodo = ultimonodo->liga;
n++;
}
ultimonodo->liga = NULL;
printf ("\n\n ");
recorreiterativo(p);
}
}
else
printf ("\n\n\t\t La lista esta vacia !!!");
getch();
return (p);
}
Alguna idea de como puedo insertar ordenadamente los elementos a la lista circular? ^^'