Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Autor: Joel Fernandez
- Curso: Estructura de Datos
- Ejercicio: IMPLEMENTACION DE UNA LISTA CIRCULAR
- Descripcion: funciones inserta, elimina, busca y elimina
- IDE: CodeBlocks
- Pagina Web: http://codebotic.blogspot.com
- */
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- struct nodo{
- int nro; //los datos seran de tipo entero
- struct nodo *sgte; //puntero
- };
- typedef struct nodo;//definimos a nodo como un tipo de variable
- nodo *fin;//puntero que ira siempre al final de la lista
- nodo *lista;//puntero que para nosotros apuntara a la cabeza de nuestra lista
- void menu1(); //declaramos las funciones a usar
- void insertarInicio();
- void insertarFinal();
- void mostrar();
- void buscarElemento();
- void eliminarElemento();
- void eliminarElementos();
- /* Funcion Principal
- ---------------------------------------------------------------------*/
- int main(void)
- {
- lista = NULL;
- int op; // opcion del menu
- system("color 0a");
- do
- {
- menu1();
- cin>>op;
- switch(op)
- {
- case 1:
- insertarInicio();
- break;
- case 2:
- insertarFinal();
- break;
- case 3:
- cout<<"\n\n Lista Circular \n\n";
- mostrar();
- break;
- case 4:
- buscarElemento();
- break;
- case 5:
- eliminarElemento();
- break;
- case 6:
- eliminarElementos();
- break;
- default: cout<<"OPCION NO VALIDA...!!!";
- break;
- }
- cout<<endl<<endl;
- system("pause"); system("cls");
- }while(op!=7);
- return 0;
- }
- //////////////////////MOSTRAR MENU///////////////////////////////
- void menu1()
- {
- cout<<"\n\t\tLISTA ENLAZADA CIRCULAR\n\n";
- cout<<" 1. INSERTAR AL INICIO "<<endl;
- cout<<" 2. INSERTAR AL FINAL "<<endl;
- cout<<" 3. REPORTAR LISTA "<<endl;
- cout<<" 4. BUSCAR ELEMENTO "<<endl;
- cout<<" 5. ELIMINAR ELEMENTO 'V' "<<endl;
- cout<<" 6. ELIMINAR ELEMENTOS CON VALOR 'V' "<<endl;
- cout<<" 7. SALIR "<<endl;
- cout<<"\n INGRESE OPCION: ";
- }
- //////////////////////INSERTAR AL INICIO//////////////////////////
- void insertarInicio()
- {
- nodo *nuevo;
- nuevo=new struct nodo;
- cout<<"\n***INSERTA AL INICIO*****\n";
- cout<<"\nINGRESE DATO:";
- cin>>nuevo->nro;
- nuevo->sgte=NULL;
- if(lista==NULL)
- {
- cout<<"PRIMER ELEMENTO..!!!";
- lista=nuevo;
- lista->sgte=lista;
- fin=nuevo;
- }
- else
- {
- nuevo->sgte = lista;
- lista = nuevo;
- fin->sgte = lista;
- }
- }
- //////////////////INSERTAR AL FINAL/////////////////////
- void insertarFinal()
- {
- nodo *nuevo;
- nuevo=new struct nodo;
- cout<<"\n***INSERTA AL INICIO*****\n";
- cout<<"\nINGRESE DATO:";
- cin>>nuevo->nro;
- nuevo->sgte=NULL;
- if(lista==NULL)
- {
- cout<<"PRIMER ELEMENTO..!!!";
- lista=nuevo;
- lista->sgte=lista;
- fin=nuevo;
- }
- else
- {
- fin->sgte = nuevo;
- nuevo->sgte = lista;
- fin = nuevo;
- }
- }
- //////////////////MOSTRAR TODOS LOS DATOS////////////////////////
- void mostrar()
- { nodo *aux;
- aux=lista;
- int i=1;
- if(lista!=NULL)
- {
- do
- { cout<<" "<<aux->nro;
- aux = aux->sgte;
- i++;
- }while(aux!=lista);
- }
- else
- cout<<"\n\n\tLista vacia...!"<<endl;
- }
- //////////////////BUSCAR ELEMENTO///////////////////////
- void buscarElemento() //esta funcion muestra la posicion del primer dato coincidente
- //encontrado en la lista
- {
- nodo *aux;
- int i = 1, valor , flag = 0;
- cout<<"\nINGRESE ELEMENTO A BUSCAR:";
- cin>>valor;
- if(lista !=NULL)
- {
- aux = lista;
- do
- {
- if(aux->nro == valor)
- {
- cout<<"\n\n Encontrado en posicion "<< i <<endl;
- flag=1;
- }
- else
- {
- aux = aux->sgte;
- i++;
- }
- }while(aux!=lista);
- if(flag==0) cout<<"\n\n\tNumero no econtrado..!"<<endl;
- }
- else
- cout<<"\n\n\tLista vacia...!"<<endl;
- }
- ////////////////ELIMINAR ELEMENTO DETERMINADO//////////////////////
- void eliminarElemento()
- {
- nodo *aux, *r, *q;
- int i = 1, flag = 0,valor;
- cout<<"\n INGRESE ELEMENTO A ELIMINAR:";
- cin>>valor;
- if(lista !=NULL)
- {
- aux = lista;
- do
- {
- if(aux->nro == valor)
- {
- if(aux==lista)//si es que el dato a eliminar es el primero
- { r=lista;
- lista=lista->sgte;
- aux=aux->sgte;
- fin->sgte=lista;
- r->sgte=NULL;
- if(fin->sgte==NULL)
- {
- lista==NULL;
- aux==NULL;
- delete(r);
- cout<<"\nELEMENTO ELIMINADO...!!!\n";
- return;
- }
- else
- {
- delete(r);
- cout<<"\nELEMENTO ELIMINADO...!!!\n";
- return;
- }
- }
- else
- {
- if(aux==fin)//si es que el dato a eliminar es al que apunta a fin
- {
- r=aux;
- aux=aux->sgte;
- q->sgte=aux;
- fin=q;
- r->sgte=NULL;
- delete(r);
- cout<<"\nELEMENTO ELIMINADO...!!!\n";
- return;
- }
- else
- {
- r=aux;
- aux=aux->sgte;
- q->sgte=aux;
- r->sgte=NULL;
- delete(r);
- cout<<"\nELEMENTO ELIMINADO...!!!\n";
- return;
- }
- }
- flag=1;
- }
- else
- { q=aux;
- aux = aux->sgte;
- i++;
- }
- }while(aux!=lista);
- if(flag==0)
- cout<<"\n\n\tNumero no econtrado..!"<<endl;
- }
- else
- cout<<"LISTA VACIA...!!!!";
- }
- //////////////////////ELIMINAR REPETIDOS/////////////////////
- void eliminarElementos()
- {
- nodo *aux, *r, *q;
- int flag = 0,valor;
- cout<<"\n DATO REPETIDO A ELIMINAR:";
- cin>>valor;
- if(lista !=NULL)
- { aux=lista;
- while(aux->nro==valor)//si los primeros elementos son repetidos
- if(aux==lista) //esta funcion borra a estos
- {
- r=lista;
- aux=lista->sgte;
- lista=lista->sgte;
- fin->sgte=lista;
- r->sgte=NULL;
- if(fin->sgte==NULL)
- {
- lista==NULL;
- aux==NULL;
- delete(r);
- flag=1;
- }
- else
- {
- delete(r);
- flag=1;
- }
- }
- do
- {
- if(aux->nro == valor)
- {
- while(aux==lista)
- {
- r=lista;
- aux=lista->sgte;
- lista=lista->sgte;
- fin->sgte=lista;
- r->sgte=NULL;
- if(fin->sgte==NULL)
- {
- lista==NULL;
- aux==NULL;
- delete(r);
- }
- else
- delete(r);
- }
- if(aux==fin)//para si el elemento a borrar es apuntado por *fin
- {
- r=aux;
- aux=aux->sgte;
- q->sgte=aux;
- fin=q;
- r->sgte=NULL;
- delete(r);
- }
- else
- {
- r=aux;
- aux=aux->sgte;
- q->sgte=aux;
- r->sgte=NULL;
- delete(r);
- }
- flag=1;
- }
- else
- { q=aux;
- aux = aux->sgte;
- }
- }while(aux!=lista);
- if(flag==0)
- cout<<"\n\n\tNumero no econtrado..!"<<endl;
- }
- else
- cout<<"LISTA VACIA...!!!!";
- }
Advertisement
Add Comment
Please, Sign In to add comment