lunes, 6 de agosto de 2012

Filas Dobles De Caracteres


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define ASCENDENTE 1
#define DESCENDENTE 0
void alex(void);
typedef struct nodo{
int valor;
struct nodo*siguiente;
struct nodo*anterior;
}tipoNodo;
typedef tipoNodo*pNodo;
typedef tipoNodo*Lista;
void Insertar(Lista*l, char v);
void Borrar(Lista*l, char v);
void BorrarLista(Lista*);
void MostrarLista(Lista lista, char orden);
main()
{
alex();
int a,i;
char  x=0, e=0;
Lista lista=NULL;
pNodo p;
printf("\t\t*****************Filas Dobles De Caracteres*****************\n\n");
for (i=1; i<=10; i++)
{
printf("Teclea Los Caracteres:\n");
scanf("%c", &x);
fflush(stdin);
Insertar(&lista, x);
}  
MostrarLista(lista, ASCENDENTE);
MostrarLista(lista, DESCENDENTE);
printf("\n ¿Cuantos Caracteres Quiere Borrar?:");
scanf("%d",&a);
fflush(stdin);
for(i=0;i<a;i++)
{
printf("\nTeclea El Caracter A Borrar: ");
scanf("%c",&e);
fflush(stdin);
Borrar(&lista,e);
}
MostrarLista(lista, ASCENDENTE);
MostrarLista(lista, DESCENDENTE);
BorrarLista(&lista);
system("PAUSE");
return 0;
}
void Insertar(Lista*lista, char v)
{
pNodo nuevo, actual;
nuevo=(pNodo)malloc(sizeof(tipoNodo));
nuevo->valor=v;
actual=*lista;
if(actual)
while(actual->anterior)
actual=actual->anterior;  
if(!actual|| actual->valor>v){
nuevo->siguiente=actual;
nuevo->anterior=NULL;
if(actual)
actual->anterior=nuevo;
if(!*lista)
*lista=nuevo;
}
else{
while(actual->siguiente&&actual->siguiente->valor<v)
actual=actual->siguiente;
nuevo->siguiente=actual->siguiente;
actual->siguiente=nuevo;
nuevo->anterior=actual;
if(nuevo->siguiente)
nuevo->siguiente->anterior=nuevo;
}
}
void Borrar (Lista*lista, char v)
{
pNodo nodo;    
nodo =*lista;
while(nodo&&nodo->valor<v)
nodo=nodo->siguiente;
while(nodo&&nodo->valor>v)
nodo=nodo->anterior;
if(!nodo||nodo->valor!=v)
return;
if(nodo==*lista)
if(nodo->anterior)
*lista=nodo->anterior;
else
*lista=nodo->siguiente;
if(nodo->anterior)
nodo->anterior->siguiente=nodo->siguiente;
if(nodo->siguiente)
nodo->siguiente->anterior=nodo->anterior;
free(nodo);
}
void BorrarLista(Lista*lista)
{
pNodo nodo,actual;
actual=*lista;
while(actual->anterior)
actual=actual->anterior;
while(actual){
nodo=actual;
actual=actual->siguiente;
free(nodo);
}
*lista=NULL;
}
void MostrarLista(Lista lista,char orden)
{
pNodo nodo=lista;
if(!lista)
printf("Lista Vacia");
nodo= lista;
if(orden==ASCENDENTE){
while(nodo->anterior)
nodo=nodo->anterior;
printf("\nOrden Ascendente\n");
while(nodo){
printf("%c->",nodo->valor );
nodo=nodo->siguiente;
}
}
else{
while(nodo->siguiente)
nodo=nodo->siguiente;
printf("Orden Desendente\n");
while(nodo){
printf("%c->",nodo->valor);
nodo=nodo->anterior;
}
}
printf("\n");
}    
void alex(void)
{
printf("Alejandro Gonzalez Arteaga\n");
printf("Grupo: 110352\tMatricula:1311120069\n");
printf("Informatica\n\n");
}          

No hay comentarios:

Publicar un comentario