Professional Documents
Culture Documents
31.
32.
33.
34.
35.
36.
Ejemplo 12.4
Disee una lista circular doblemente enlazada, que gaurde enteros, y luego permita determinar cuantas
veces se encuentra un nmero ingresado por el usuario.
#include <stdio.h>
#include <conio.h>
#include <string.h>
/*Version Circular doblememente enlazada*/
typedef struct tipoNodo{
int x;
struct tipoNodo *adelante;
struct tipoNodo *atras;
}Nodo;
/*Declaracion de los sinonimos para referirnos al tipo de dato*/
typedef Nodo *tLista;
typedef Nodo *tPosicion;
int cont=0;
/*Declaracin de las funciones que utilizaremos*/
void insertarPrim (tLista cabeza, int entrada);
tLista CrearNodo();
void ImprimeLista(Nodo *ptr);
int buscar(int busca, Nodo *cabeza, Nodo *ptr);
main()
{
/*inicio del programa principal*/
Nodo *ptr;
tPosicion cabeza;
int entrada, opc, busca;
char ban;
/*cabeza contiene la direccin del primer nodo creado*/
cabeza=CrearNodo();
ban='S';
clrscr();
printf("\n\n\n\n");
printf("\n\t
");
printf("\n\t ");
printf("\n\t PROGRAMA QUE CALCULA LOS VALORES REPETIDOS EN UNA LISTA ");
printf("\n\t DOBLEMENTE ENLAZADA ");
printf("\n\t ");
printf("\n\t
");
while(ban=='S' || ban=='s')
{
printf("\n\nIngrese un elemento para la lista:\n");
scanf("%d", &entrada);
cont++;
/*le enviamos a la funcion de insertar, le enviamos la direccin del
primer nodo y el valor que vamos a introducir*/
insertarPrim(cabeza, entrada);
printf("Desea Introducir un nuevo elemento a la lista? (S/N)\n");
ban=getch();
}
printf("Los Valores Guardados en la Lista son:\n");
/*la funcion de imprimir, recibe un puntero hacia el primer
nodo para iniciar con la impresion*/
clrscr();
ImprimeLista(cabeza);
getch();
clrscr();
printf("\n\t\tQue desea Hacer?\n");
}
}
int buscar(int busca, Nodo *cabeza, Nodo *ptr)
{
int k=0;
if(ptr!=NULL)
{
cabeza=ptr->adelante;
do{
if(cabeza->x==busca)
k++;
cabeza=cabeza->adelante;
}while(cabeza!=ptr->adelante);
}
else
{
printf("No Hay elementos en la Lista\n");
}
return k;
}