Skip to content

Instantly share code, notes, and snippets.

@jofese
Created November 11, 2014 04:57
Show Gist options
  • Save jofese/7e64ffb756891b637dfa to your computer and use it in GitHub Desktop.
Save jofese/7e64ffb756891b637dfa to your computer and use it in GitHub Desktop.
Implementacion de una lista enlazada circular en C++
/*
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...!!!!";
}
@normi25
Copy link

normi25 commented Jul 4, 2022

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);

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment