listas con apuntadores dinámicos
TRANSCRIPT
![Page 1: Listas con apuntadores dinámicos](https://reader036.vdocumento.com/reader036/viewer/2022071818/55b16d75bb61ebb50b8b4770/html5/thumbnails/1.jpg)
/*Programa de listas con apuntadores dinámicos
M. I. Blanca Elia Jiménez Guzmán
Noviembre de 2013*/
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
void push(void);
void pop(void);
void recorrido(void);
void busqueda(void);
int buscar(int dato);
void menu(void);
void tecla(void);
struct ficha
{
int num;
struct ficha *sig;
} *aux1,*aux2,*nvo,*pri;
int e=0, numero;
int main()
{
system("cls");
aux1=NULL;
aux2=NULL;
pri=NULL;
menu();
return 0;
}
void menu(void)
{
char op='1';
while (op!='5')
{
system("cls");
cout <<"\nMenu para listas dinamicas"<<endl;
cout <<"1.- Insertar"<<endl;
cout <<"2.- Eliminar"<<endl;
cout <<"3.- Buscar"<<endl;
cout <<"4.- Recorrido"<<endl;
cout <<"5.- Salir"<<endl;
cout <<"Selecciona una opcion ";op=getche();
system("cls");
switch (op)
{
case '1': push();
break;
case '2': pop();
break;
case '3': busqueda();
break;
case '4': recorrido();
break;
}
}
}
![Page 2: Listas con apuntadores dinámicos](https://reader036.vdocumento.com/reader036/viewer/2022071818/55b16d75bb61ebb50b8b4770/html5/thumbnails/2.jpg)
void push(void)
{
nvo=new ficha;
cout <<"\nNumero: ";
cin>>nvo->num;
nvo->sig=NULL;
if(pri==NULL)
pri=nvo;
else
{
e=buscar(nvo->num);
if(e==1)
cout<<"Dato repetido";
else
{
if(nvo->num<aux1->num && aux1==pri)
{
nvo->sig=pri;
pri=nvo;
}
else if(aux1->sig==NULL && nvo->num > aux1->num)
aux1->sig=nvo;
else
{
aux2->sig=nvo;
nvo->sig=aux1;
}
}
}
tecla();
}
void pop(void)
{
char seg;
if(pri==NULL)
cout<<"\nLista vacia"<<endl;
else
{
cout <<"\nNumero a borrar: ";
cin>>numero;
e=buscar(numero);
if(e==1)
{
cout<<"Dato a borrar: "<<aux1->num<<" ¿Estas seguro [s/n]? ";
seg=tolower(getche());
if (seg=='s')
{
if(aux1==pri)
pri=aux1->sig;
else
aux2->sig=aux1->sig;
delete aux1;
cout<<"\nDato borrado";
}
}
else
cout<<"Dato no encontrado"<<endl;
}
tecla();
}
![Page 3: Listas con apuntadores dinámicos](https://reader036.vdocumento.com/reader036/viewer/2022071818/55b16d75bb61ebb50b8b4770/html5/thumbnails/3.jpg)
void recorrido(void)
{
if (pri==NULL)
cout <<"\nLista vacia";
else
{
aux1=pri;
while (aux1!=NULL)
{
cout<<aux1->num<<" --> ";
aux1=aux1->sig;
}
}
tecla();
}
void busqueda(void)
{
if(pri==NULL)
cout<<"\nLista vacia"<<endl;
else
{
cout <<"\nNumero a buscar: ";
cin>>numero;
e=buscar(numero);
if(e==1)
{
cout<<"\nDato encontrado";
cout<<"\nNumero: "<<aux1->num;
}
else
cout<<"\nDato no encontrado"<<endl;
}
tecla();
}
int buscar(int dato)
{
int encuentra=0;
aux1=pri;
while(aux1->num<dato && aux1->sig!=NULL)
{
aux2=aux1;
aux1=aux1->sig;
}
if(aux1->num==dato)
encuentra=1;
return (encuentra);
}
void tecla(void)
{
cout<<"\nPresiona una tecla para continuar"<<endl;
getch();
}