lista enlazada simple. la lista enlazada básica es la lista enlazada simple la cual tiene un...
Post on 03-Feb-2016
220 Views
Preview:
TRANSCRIPT
LISTA ENLAZADA SIMPLE
La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vacía, si es el último nodo.
He aquí tenemos un ejemplo de una lista enlazada simple:
DECLARACIÓN DE PROTOTIPOS
#include<alloc.h>#include<stdlib.h>#include<conio.h>#include<iostream.h>
DECLARAMOS LA ESTRUCTURA
typedef struct nodo{int dato;struct nodo * siguiente;}tipoNodo;
RESERVAMOS EL ESPACIO DE MEMORIA
tipoNodo *nuevo_elemento();
OPERACIONES QUE VAMOS A AREALIZAR
void crear();void insertar();void insertar_inicio();void insertar_ordenado();void insertar_final();void presentar();void modificar();void buscar();void ordenar();void ordenar_ascendente();void ordenar_descendente();void eliminar();void eliminar_cabeza();
FUNCIÓN PARA EL CUADRO
void cuadro(int x1,int y1, int x2, int y2, char simb);
NUESTRA CABEZA
tipoNodo *cab;
tipoNodo *nuevo_elemento(){tipoNodo *nodo1;nodo1=(tipoNodo *)malloc(sizeof(tipoNodo ));if(!nodo1)cout<<“No se ha reservado memoria para el nuevo “;return nodo1;}
void main(){clrscr();crear();clrscr();char opc=’ ‘;
do{
clrscr();cuadro(1,10,35,56,’²’);gotoxy(13,3);cout<<“->[ LISTAS ENLAZADAS ]<-\n”;gotoxy(12,6);cout<<” MENU PRINCIPAL\n”;gotoxy(12,9); cout<<” [1]: INSERTAR\n”;gotoxy(12,12);cout<<” [2]: MODIFICAR\n”;gotoxy(12,15);cout<<” [3]: BUSCAR\n”;gotoxy(12,17);cout<<” [4]: ORDENAR\n”;gotoxy(12,19);cout<<” [5]: ELIMINAR\n”;gotoxy(12,21);cout<<” [6]: PRESENTAR\n”;gotoxy(12,24);cout<<” [7]: SALIR DEL MENU\n”;
gotoxy(12,27);cout<<” Elegir una Opci¢n [ ]”;gotoxy(32,27);cin>>opc;
switch(opc){case’1′:clrscr();insertar();getch();break;case’2′:clrscr();modificar();getch();break;case’3′:clrscr();buscar();getch();break;case’4′:clrscr();ordenar();getch();break;case’5′:clrscr();eliminar();getch();break;
case’6′:clrscr();presentar();getch();break;
}
}while(opc!=’7′);
getch();
}
CREANDO LA CABEZA
void crear(){clrscr();cab=nuevo_elemento();gotoxy(20,20);cout<<“Ingrese valor de cabeza :\t”;cin>>cab->dato;cab->siguiente=NULL;getch();
}
MENU DE INSERTAR
void insertar(){clrscr();char opc=’ ‘;
do{
clrscr();cuadro(1,10,35,56,’²’);gotoxy(13,3);cout<<“->[ LISTAS ENLAZADAS ]<-\n”;gotoxy(12,6);cout<<” MENU PRINCIPAL\n”;gotoxy(12,9); cout<<” [1]: INSERTAR AL INICIO\n”;gotoxy(12,12);cout<<” [2]: insertar AL FINAL\n”;gotoxy(12,15);cout<<” [3]: INSERTAR ORDENADO\n”;gotoxy(12,18);cout<<” [4]: REGRESAR\n”;
gotoxy(12,21);cout<<” Elegir una Opci¢n [ ]”;gotoxy(32,21);cin>>opc;
switch(opc){case’1′:clrscr();insertar_inicio();getch();break;case’2′:clrscr();insertar_final();getch();break;case’3′:clrscr();insertar_ordenado();getch();break;
}
}while(opc!=’4′);
getch();
}
INSERATAR AL INICIO
void insertar_inicio(){clrscr();
nodo *pAuxElem;nodo *recorre;pAuxElem=(tipoNodo*) malloc(sizeof(tipoNodo));while(recorre->siguiente!=NULL){recorre=recorre->siguiente;}
int n;gotoxy(20,20);cout<<“INGRESE VALOR :\t”;cin>>n;pAuxElem->dato=n;pAuxElem->siguiente=cab;cab=pAuxElem;}
INSERTAR AL FINAL
void insertar_final(){clrscr();nodo *elem;elem=nuevo_elemento();clrscr();gotoxy(20,20);cout<<“INGRESE VALOR :\t”;cin>>elem->dato;nodo *recorrer;recorrer=cab;while(recorrer->siguiente!=NULL)recorrer=recorrer->siguiente;recorrer->siguiente=elem;elem->siguiente=NULL;getch();}
INSERTAR ORDENADO
void insertar_ordenado(){clrscr();nodo *pAuxElem;nodo *post;nodo *recorre;pAuxElem=(tipoNodo*) malloc(sizeof(tipoNodo));post=(tipoNodo*) malloc(sizeof(tipoNodo));int n;gotoxy(20,20);cout<<“INGRESE VALOR :\t”;cin>>n;
if(n<cab->dato){
post=cab->siguiente;while((pAuxElem->dato>post->dato)&&(post->siguiente!=NULL)){post=post->siguiente;}
if(post->siguiente!=NULL){pAuxElem->siguiente=cab;cab=pAuxElem;}else{pAuxElem->siguiente=NULL;post->siguiente=pAuxElem;}
}else{while(recorre->siguiente!=NULL){recorre=recorre->siguiente;}pAuxElem->dato=n;pAuxElem->siguiente=cab;cab=pAuxElem;}
PARA MODIFICAR
void modificar(){clrscr();nodo *elem;nodo *ele;gotoxy(10,25);cout<<“ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n”;gotoxy(10,26);cout<<“º º\n”;gotoxy(10,27);cout<<“ºMODIFICAR NUMERO DE LISTA º\n”;gotoxy(10,28);cout<<“º º\n”;gotoxy(10,29);cout<<“ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n”;gotoxy(20,20);cout<<“INGRESE EL VALOR A MODIFICAR :\t”;cin>>elem->dato;nodo *recorrer;recorrer=cab;
while(recorrer!=NULL){
if(recorrer->dato==elem->dato){clrscr();gotoxy(20,20);cout<<“INGRESE VALOR :\t”;cin>>ele->dato;
recorrer->dato=ele->dato;}recorrer=recorrer->siguiente;
}getch();}
PARA BUSCAR
void buscar(){clrscr();nodo *elem;
gotoxy(10,25);cout<<“ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n”;gotoxy(10,26);cout<<“º º\n”;gotoxy(10,27);cout<<“ºBUSCADOR DE NUMERO DE LISTAº\n”;gotoxy(10,28);cout<<“º º\n”;gotoxy(10,29);cout<<“ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n”;gotoxy(20,20);cout<<“INGRESE EL VALOR A BUSCAR :\t”;cin>>elem->dato;nodo *recorrer;recorrer=cab;while(recorrer!=NULL){
if(recorrer->dato==elem->dato){clrscr();gotoxy(20,20);cout<<elem->dato<<“:\t”;cout<<“ESTE ELEMENTO SI EXISTE”;recorrer->dato=elem->dato;}
recorrer=recorrer->siguiente;
}
getch();}
ORDENAR
void ordenar(){clrscr();char opc=’ ‘;
do{
clrscr();cuadro(1,10,25,56,’²’);gotoxy(13,3);cout<<“->[ ORDENAR LAS LISTAS ENLAZADAS ]<-\n”;gotoxy(12,6);cout<<” MENU PRINCIPAL\n”;gotoxy(12,9); cout<<” [1]: ORDENAR ASCENDENTE\n”;gotoxy(12,12);cout<<” [2]: ORDENAR DESCENDENTE\n”;gotoxy(12,15);cout<<” [3]: REGRESAR\n”;
gotoxy(12,17);cout<<” Elegir una Opci¢n [ ]”;gotoxy(32,17);cin>>opc;
switch(opc){case’1′:clrscr();ordenar_ascendente();getch();break;case’2′:clrscr();ordenar_descendente();getch();break;
}
}while(opc!=’3′);
getch();
}
void ordenar_ascendente(){nodo* aux;nodo* temp;int vaux;aux=(tipoNodo *)malloc(sizeof(tipoNodo));temp=(tipoNodo *)malloc(sizeof(tipoNodo));aux=cab;
while (aux!=NULL){temp=aux;while(temp->siguiente!=NULL){temp=temp->siguiente;if(aux->dato>temp->dato){vaux=aux->dato;aux->dato=temp->dato;temp->dato=vaux;}}aux=aux->siguiente;}}
void ordenar_descendente(){nodo* aux;nodo* temp;int vaux;aux=(tipoNodo *)malloc(sizeof(tipoNodo));temp=(tipoNodo *)malloc(sizeof(tipoNodo));aux=cab;
while (aux!=NULL){temp=aux;while(temp->siguiente!=NULL){temp=temp->siguiente;if(aux->dato<temp->dato){vaux=aux->dato;aux->dato=temp->dato;temp->dato=vaux;}}aux=aux->siguiente;}}
ELIMINAR
void eliminar(){presentar();nodo *eliminar;// nodo *recorrer;nodo *asigna;gotoxy(10,25);cout<<“ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n”;gotoxy(10,26);cout<<“º º\n”;gotoxy(10,27);cout<<“ºINSERTAR NUMERO A ELIMINARº\n”;gotoxy(10,28);cout<<“º º\n”;gotoxy(10,29);cout<<“ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n”;gotoxy(10,31);cout<<“Ingrese el n—mero a eliminar\t”;cin>>eliminar->dato;
// recorrer=cab;if (eliminar->dato==cab->dato){
eliminar_cabeza();}else{nodo *anterior=cab;nodo * aux=cab->siguiente;
while((aux!=NULL)&&(aux->dato!=eliminar->dato)){anterior=aux;aux=aux->siguiente;}if(aux!=NULL){anterior->siguiente=aux->siguiente;aux->siguiente=NULL;free(aux);
}else{gotoxy(10,33);cout<<“NO SE ENCUENTRA”;}}
}
ELIMINAR CABEZA
void eliminar_cabeza(){nodo *aux;aux=cab;cab=cab->siguiente;aux->siguiente=NULL;free(aux);}
PRESENTAR LA LISTA
void presentar(){clrscr();int f=10;nodo *recorrer;recorrer=cab;gotoxy(20,f);while(recorrer!=NULL){gotoxy(20,f);cout<<recorrer->dato;cout<<“\n\n”;
recorrer=recorrer->siguiente;f=f+2;}getch();}
PRESENTAR LOS BORDES DE UN CUADRO
void cuadro(int x1,int y1, int x2, int y2, char simb){for (int i1=y1;i1<=y2;i1++){gotoxy(i1,x1);cout<<simb;gotoxy(i1,x2);cout<<simb;}for (int i2=x1;i2<=x2;i2++){gotoxy(y1,i2);cout<<simb;gotoxy(y2,i2);cout<<simb;}}
top related