- #include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<graphics.h>
char *Titulos[]={ " Insertar Datos",
" Mostrar Lista",
" Mostrar Lista Inversa",
" Penultimo Elemento",
" Mostrar Doble",
" Invertir Lista",
" Mayor Elemento",
" Intercambiar Nodos",
" Intercalar Disminuyendo",
" Intercalar Duplicando",
" Intercalar Incrementando",
" Vaciar(Lista)",
" Salir "};
struct nodo_lista
{
int dato;
nodo_lista *sgte;
nodo_lista *ant;
};
typedef nodo_lista *nodo;
nodo Ejecuta_aux(int,nodo);
nodo ReservarMemoria();
nodo CrearNodo(int);
nodo InsertarInicio(nodo, int);
nodo InsertarPosicion(nodo, int,int);
nodo InsertarFinal(nodo, int);
nodo Insertar(nodo);
int Longitud(nodo);
void Mostrar(nodo);
void MostrarDoble(nodo Lista);
void MostrarFinal(nodo);
void Penultimo(nodo);
void ElementoMayor(nodo);
nodo IntercambiarNodo(nodo,int);
nodo Invertir(nodo);
nodo Intercalar_Disminuye(nodo);
nodo Intercalar_Duplica(nodo);
nodo Intercalar_Incrementa(nodo);
nodo Vaciar(nodo);
void cmarco(int,int,int,int);
void cmarco_aux(int,int,int,int);
nodo lista=NULL;
mainaux();
void cmarco(int x1,int x2,int y1,int y2)
{
int CONT1,CONT2;
for (CONT1=x1; CONT1<x2; CONT1++)
{
gotoxy(CONT1,y1); cout<<"Í";
gotoxy(CONT1,y2); cout<<"Í";
}
for (CONT2=y1; CONT2<y2; CONT2++)
{
gotoxy(x1,CONT2); cout<<"º";
gotoxy(x2,CONT2); cout<<"º";
}
gotoxy(x1,y1); cout<<"É";
gotoxy(x2,y1); cout<<"»";
gotoxy(x1,y2); cout<<"È";
gotoxy(x2,y2); cout<<"¼";
}
void cmarco_aux(int x1,int x2,int y1,int y2)
{
int CONT1,CONT2;
for (CONT1=x1; CONT1<x2; CONT1++)
{
gotoxy(CONT1,y1); cout<<"Ä";
gotoxy(CONT1,y2); cout<<"Ä";
}
for (CONT2=y1; CONT2<y2; CONT2++)
{
gotoxy(x1,CONT2); cout<<"³";
gotoxy(x2,CONT2); cout<<"³";
}
gotoxy(x1,y1); cout<<"Ú";
gotoxy(x2,y1); cout<<"¿";
gotoxy(x1,y2); cout<<"À";
gotoxy(x2,y2); cout<<"Ù";
}
void Resalta(int Y)
{
textcolor(RED);
textbackground(7);
gotoxy(3,3+Y); cprintf("%s",Titulos[Y-1]);
textcolor(BLUE);
textbackground(BLACK);
}
void Ejecuta(int Opc)
{
int elem;
switch(Opc)
{
case 1:lista=Insertar(lista);getch();break;
case 2:Mostrar(lista);getch();break;
case 3:MostrarFinal(lista);getch();break;
case 4:Penultimo(lista);getch();break;
case 5:MostrarDoble(lista);getch();break;
case 6:lista=Invertir(lista);getch();break;
case 7:ElementoMayor(lista);getch();break;
case 8:gotoxy(32,2);printf("Ingrese numero para Intercambiar :_");
scanf("%d",&elem);
lista=IntercambiarNodo(lista,elem);break;
//--------------Examen------------------
case 9:lista=Intercalar_Disminuye(lista);break;
case 10:lista=Intercalar_Duplica(lista);break;
case 11:lista=Intercalar_Incrementa(lista);break;
case 12:lista=Vaciar(lista);break;
case 13:lista=Vaciar(lista); free(lista);
cmarco(44,63,9,11);
gotoxy(51,13);printf("F I N");
getch();
exit(0);
break;
}
// getch();
}
main(){
mainaux();
return 0;
}
int mainaux()
{
char Opc;
int Y=1;
textmode(C80);
do
{
textcolor(WHITE);
textbackground(1);
clrscr();
cmarco(2,29,1,25);
cmarco(30,79,1,25);
gotoxy(10,2); cprintf("LISTAS DOBLES");
for(int f=0; f<13; f++)
{
gotoxy(3,4+f); cout <<Titulos[f];
}
Resalta(Y);
Opc=getch();
switch(Opc) //claves: 72=>flecha arriba 80=>flecha abajo 13=>Enter.
{
case 72: if(Y==1) Y=13; else Y--; break;
case 80: if(Y==13) Y=1; else Y++; break;
case 13: Ejecuta(Y);
}
}while(1);
}
nodo ReservarMemoria()
{
nodo nuevo;
nuevo=(nodo)malloc (sizeof(struct nodo_lista));
return (nuevo);
}
nodo CrearNodo(int elem)
{
nodo nuevo;
nuevo=ReservarMemoria();
nuevo->dato=elem;
nuevo->sgte=NULL;
nuevo->ant=NULL;
return nuevo;
}
nodo InsertarInicio(nodo Lista, int elem)
{
nodo nuevo;
nuevo=CrearNodo(elem);
if(Lista==NULL)
Lista=nuevo;
else
{ nuevo->sgte=Lista;
Lista->ant=nuevo;
Lista=nuevo;
}
return Lista;
}
nodo InsertarPosicion(nodo Lista, int elem,int pos)
{ int i=2;
nodo nuevo,aux;
nuevo=CrearNodo(elem);
if(pos==1)
Lista=InsertarInicio(Lista,elem);
else if(pos==Longitud(Lista)+1)
Lista=InsertarFinal(Lista,elem);
else
{ aux=Lista;
while(i!=pos)
{ aux=aux->sgte;
i++;
}
aux->sgte->ant=nuevo;
nuevo->sgte=aux->sgte;
aux->sgte=nuevo;
nuevo->ant=aux;
}
return Lista;
}
nodo InsertarFinal(nodo Lista, int elem)
{ nodo nuevo,aux;
nuevo=CrearNodo(elem);
if(Lista==NULL)
Lista=nuevo;
else
{ aux=Lista;
while(aux->sgte!=NULL)
aux=aux->sgte;
aux->sgte=nuevo;
nuevo->ant=aux;
}
return Lista;
}
nodo Insertar(nodo Lista)
{ int opcion,elem,pos;
textbackground(2);
do
{ clrscr();
printf ("\n --------- Como quieres Insertar los datos ---------\n\
\n\
ÉÍ[þ]ÍÍÍÍÍÍÍÍ» ÉÍ[þ]ÍÍÍÍÍÍÍÍÍÍ» ÉÍ[þ]ÍÍÍÍÍÍÍÍ» \n\
º [1] Inicio º º [2] Posicion º º [3] Final º \n\
ÈÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ÈÍÍÍÍÍÍÍÍÍÍÍͼ \n\n");
printf ("\n --: Teclea tu opcion:_");
scanf ("%d", & opcion);
} while(opcion>3 || opcion<=0);
printf (" --: Dame el elemento a insertar:_");
scanf("%d", &elem);
if(opcion==1){
Lista=InsertarInicio(Lista,elem);
gotoxy(15,13);printf("! Ya se Insert¢ ");}
if(opcion==2)
{ printf("\n --: Ingrese la Posicion para Insertar :_");
scanf("%d",&pos);
if(pos>=1 && pos<=Longitud(Lista)+1){
Lista=InsertarPosicion(Lista,elem,pos);
gotoxy(15,15);printf("! Ya se Insert¢ ");}
else
printf("\n .... Posicion fuera de Rango ....");
}
if(opcion==3){
Lista=InsertarFinal(Lista, elem);
gotoxy(15,13);printf("! Ya se Insert¢ ");}
return Lista;
}
int Longitud(nodo Lista)
{ int i;
if(Lista==NULL)
return 0;
else
{ i=1;
while(Lista->sgte!=NULL)
{ i++;
Lista=Lista->sgte;
}
return i;
}
}
void Mostrar(nodo Lista)
{ int i=0,j=0;
if(Lista==NULL){
gotoxy(32,2);printf ("La lista esta vacia"); }
else
{
while(Lista!=NULL)
{ if(Longitud(Lista)>=9 && Longitud(Lista)%9==0)
{i=0; j=j+3;}
i=i+5;
cmarco_aux(26+i,28+i,2+j,4+j);
gotoxy(27+i,3+j);
printf("%d", Lista->dato);
gotoxy(29+i,3+j);printf("Ä ");
Lista=Lista->sgte;
}
}
}
void MostrarFinal(nodo Lista)
{ int i=0;
nodo aux;
if(Lista==NULL){
gotoxy(32,2); printf ("La lista esta vacia");}
else
{ aux=Lista;
while(aux->sgte!= NULL)
aux=aux->sgte;
while(aux!= NULL)
{ i=i+5;
cmarco_aux(26+i,28+i,2,4);
gotoxy(27+i,3);
printf("%d", aux->dato);
gotoxy(29+i,3);printf("Ä ");
aux=aux->ant;
}
}
}
void MostrarDoble(nodo Lista)
{ int i=0;
nodo aux;
if(Lista==NULL){
gotoxy(32,2);printf ("La lista esta vacia"); }
else
{ aux=Lista;
while(aux->sgte!=NULL)
{ i=i+5;
cmarco_aux(26+i,28+i,2,4);
gotoxy(27+i,3);
printf("%d",aux->dato);
gotoxy(29+i,3);printf("Ä ");
aux=aux->sgte;
}
while(aux!=NULL)
{ i=i+5;
cmarco_aux(26+i,28+i,2,4);
gotoxy(27+i,3);
printf("%d",aux->dato);
gotoxy(29+i,3);printf("Ä ");
aux=aux->ant;
}
}
}
void Penultimo(nodo Lista)
{ nodo aux;
if(Lista==NULL){
gotoxy(32,2); printf ("La lista esta vacia");}
else
{ aux=Lista;
while(aux->sgte!= NULL)
aux=aux->sgte;
aux=aux->ant;
gotoxy(32,2); printf("El penultimo Elemento es :_%d", aux->dato);
}
}
nodo Invertir(nodo Lista)
{ int x;
nodo aux=Lista,nuevo=NULL;
if(Lista==NULL){
gotoxy(32,2); printf("Lista Vacia");}
else
{
while(aux!=NULL)
{ x=aux->dato;
nuevo=InsertarInicio(nuevo,x);
aux=aux->sgte;
}
}
return nuevo;
}
void ElementoMayor(nodo Lista)
{ int mayor;
nodo aux;
if(Lista==NULL){
gotoxy(32,2); printf("No hay Mayor");}
else
{ mayor=Lista->dato;
aux=Lista;
while(aux!=NULL)
{
if(aux->dato>mayor)
{ mayor=aux->dato;
aux=aux->sgte;
}
else
aux=aux->sgte;
}
gotoxy(32,2); printf("El mayor Elemento es :_%d",mayor);
}
}
nodo IntercambiarNodo(nodo Lista,int num)
{
int temp;
nodo aux;
if(Lista==NULL){
gotoxy(32,2);printf("Lista vacia");}
else
{ aux=Lista;
while(aux!=NULL)
{
if(aux->dato==num)
{
temp=aux->dato;
aux->dato=aux->ant->dato;
aux->ant->dato=temp;
aux=NULL;
}
else
aux=aux->sgte;
}
}
return Lista;
}
nodo Vaciar(nodo Lista)
{ nodo aux;
aux=Lista;
while(aux!=NULL)
{ Lista=Lista->sgte;
free(aux);
aux=Lista;
}
return aux;
}
//----------------Examen-----------------------------------
nodo Intercalar_Disminuye(nodo Lista)
{ int i,pos=1;
nodo aux;
aux=Lista;
while(aux!=NULL)
{ i=aux->dato-1;
Lista=InsertarPosicion(Lista,i,pos);
aux=aux->sgte;
pos=pos+2;
}
return Lista;
}
nodo Intercalar_Duplica(nodo Lista)
{ int i,pos=1;
nodo aux;
aux=Lista;
while(aux!=NULL)
{ i=aux->dato;
Lista=InsertarPosicion(Lista,i,pos);
aux=aux->sgte;
pos=pos+2;
}
return Lista;
}
nodo Intercalar_Incrementa(nodo Lista)
{ int i,pos=2;
nodo aux;
aux=Lista;
while(aux!=NULL)
{ i=aux->dato+1;
Lista=InsertarPosicion(Lista,i,pos);
aux=aux->sgte->sgte;
pos=pos+2;
}
return Lista;
}
listasdobles
LISTAS DOBLES
Suscribirse a:
Entradas (Atom)
No hay comentarios:
Publicar un comentario