Вы находитесь на странице: 1из 9

//*********************************** ******** //Manejo de pilas con lista de datos enlazados //*********************************** ********* #include<iostream> #include<stdlib.h> #include<conio.

h> using namespace std; struct nodo{ int nro; struct nodo *sgte; }; typedef nodo *ptrPila;//crea nodo tipo puntero int menu(){ int op; //menu principal cout<<endl<<endl<<endl; cout<<"\t\t"<<e ndl; cout<<"\t\t "<<endl; cout<<"\t\t PILAS "<<endl; cout<<"\t\t "<<endl; cout<<"\t\t"<<en dl; cout<<"\t\t "<<endl; cout<<"\t\t [1].- Apilar elemento(PUSH) "<<endl; cout<<"\t\t [2].- Desapilar elemento(POP) "<<endl; cout<<"\t\t [3].- Mostrar Pila "<<endl; cout<<"\t\t [4].- Eliminar pila "<<endl; cout<<"\t\t [5].- Salir "<<endl; cout<<"\t\t"<< endl; do {

cout<<"\n\n\t Elija una opcion: [ ]\b\b\b"; cin>>op; }while(op<0||op>5); return op; } //FUNCION QUE PERMITE APILAR PILAS void push(ptrPila &p,int valor){ ptrPila aux; aux=new(struct nodo);// Declaramos un puntero aux pedimos memoria al sistema aux->nro = valor;//Llenamos el atributo num con el valor ingresado por consola aux->sgte = p;//Hacemos que el nuevo numero apunte al inicio de la lista p=aux;//Finalmente la pila apunta al nuevo elemento } // Funcion permite DESAPILAR nodos de la pila int pop(ptrPila &p){ ptrPila aux; int num; aux=p;//Se almacena el valor del primer elemento de la pila num=aux->nro;//Hacemos que aux apunte al primer elemento de la pila p=aux->sgte;//Avanzamos al siguiente elemento delete(aux);//Liberamos memoria asignada al puntero return num; } void eliminarPila(ptrPila &p){

ptrPila aux; while(p!= NULL)//Consistenciamos mientras la pila sea diferente a null osea posea elementos { aux=p;//Almacenamos en un puntero aux p=p->sgte;//Avanzando una posicion delete(aux);//Liberamos la memoria asignada } } //FUNCION MOSTRAR PILA void mostrarPila(ptrPila p){ //Recorre mostrando cada elemento de la Pila ptrPila aux;

aux=p; int i=0; cout<<"\n\n\t Los numeros de la pila son:"<<endl; while(aux != NULL){ cout<<"\n Pos ["<<i+1<<"]"<<"\t\t"<<aux>nro<<endl; cout<<endl; aux = aux->sgte; i++; } } //Menu Principal int main() { system ("color 0D"); ptrPila p=NULL; int op,dato,val; system("cls"); do{ op = menu(); switch(op){ case 1: system("cls"); cout<<"\n\n\t Nro. a APILAR--->"; cin>>dato; push(p,dato);//Funcion permite cout<<"\n\n\t Numero---> "<<dato<<" Se apilo con exito! \n"; getch(); break; case 2: system("cls"); //verificar si la pila esta vaia if(p==NULL){ cout<<"\n\n\t Pila vacia !"<<endl; }else{ val = pop(p); cout<<"\n\t Numero "<< val <<" Desapilado con exito ! \n"; }//else getch(); break; //Muestra los nodos de la Pila case 3: system("cls"); cout<<"\n\n\t Mostrando Pila\n\n";

if(p!=NULL){ mostrarPila(p); }else{ cout<<"\n\t Pila Vacia"<<endl; } getch(); break; case 4: system("cls"); eliminarPila(p); cout<<"Pila destruida"<<endl; break; }//fin switch system("cls"); }while(op!=5);//fin do while return 0; system("PAUSE"); } /* Name: Listas Enlazadas simples en c++ Description: Inserta, elimina, busca, reporta */ #include <iostream> #include <stdlib.h> using namespace std; struct nodo{ int nro; // en este caso es un numero entero struct nodo *sgte; }; typedef struct nodo *Tlista; void insertarInicio(Tlista &lista, int valor) { Tlista q; q = new(struct nodo); q->nro = valor; q->sgte = lista; lista = q; } void insertarFinal(Tlista &lista, int valor) { Tlista t, q = new(struct nodo); q->nro = valor; q->sgte = NULL;

if(lista==NULL) { lista = q; } else { t = lista; while(t->sgte!=NULL) { t = t->sgte; } t->sgte = q; } } int insertarAntesDespues() { int _op, band; cout<<endl; cout<<"\t 1. Antes de la posicion "<<endl; cout<<"\t 2. Despues de la posicion "<<endl; cout<<"\n\t Opcion : "; cin>> _op; if(_op==1) band = -1; else band = 0; return band; } void insertarElemento(Tlista &lista, int valor, int pos) { Tlista q, t; int i; q = new(struct nodo); q->nro = valor; if(pos==1) { q->sgte = lista; lista = q; } else { int x = insertarAntesDespues(); t = lista;

for(i=1; t!=NULL; i++) { if(i==pos+x) { q->sgte = t->sgte; t->sgte = q; return; } t = t->sgte; } } cout<<" Error...Posicion no encontrada..!"<<endl; } void buscarElemento(Tlista lista, int valor) { Tlista q = lista; int i = 1, band = 0; while(q!=NULL) { if(q->nro==valor) { cout<<endl<<" Encontrada en posicion "<< i <<endl; band = 1; } q = q->sgte; i++; } if(band==0) cout<<"\n\n Numero no encontrado..!"<< endl; } void imprimirLista(Tlista lista) { int i = 0; while(lista != NULL) { cout <<' '<< i+1 <<") " << lista->nro << endl; lista = lista->sgte; i++; } }

void eliminarElemento(Tlista &lista, int valor) {

Tlista p, ant; p = lista; if(lista!=NULL) { while(p!=NULL) { if(p->nro==valor) { if(p==lista) lista = lista->sgte; else ant->sgte = p->sgte; delete(p); return; } ant = p; p = p->sgte; } } else cout<<" Lista vacia..!"; } void eliminaRepetidos(Tlista &lista, int valor) { Tlista q, ant; q = lista; ant = lista; while(q!=NULL) { if(q->nro==valor) { if(q==lista) // primero elemento { lista = lista->sgte; delete(q); q = lista; } else { ant->sgte = q->sgte; delete(q); q = ant->sgte; } } else { ant = q; q = q->sgte; }

}// fin del while cout<<"\n\n Valores eliminados..!"<<endl; } void menu1() { cout<<"\n\t\tLISTA ENLAZADA SIMPLE\n\n"; cout<<" 1. INSERTAR AL INICIO "<<endl; cout<<" 2. INSERTAR AL FINAL "<<endl; cout<<" 3. INSERTAR DESPUES DE UNA POSICION "<<endl; cout<<" 4. IMPRIMIR LISTA "<<endl; cout<<" 5. BUSCAR ELEMENTO POR VALOR "<<endl; cout<<" 6. ELIMINAR ELEMENTO POR POSICION "<<endl; cout<<" 7. ELIMINAR ELEMENTO POR VALOR "<<endl; cout<<" 8. SALIR "<<endl; cout<<"\n INGRESE OPCION: "; }

/* Funcion Principal --------------------------------------------------------------------*/ int main() { Tlista lista = NULL; int op; // opcion del menu int _dato; // elemenento a ingresar int pos; // posicion a insertar

system("color 0b"); do { menu1(); cin>> op; switch(op) { case 1:

cout<< "\n NUMERO A INSERTAR: "; cin>> _dato; insertarInicio(lista, _dato); break; case 2: cout<< "\n NUMERO A INSERTAR: "; cin>> _dato; insertarFinal(lista, _dato ); break; case 3: cout<< "\n NUMERO A INSERTAR: ";cin>> _dato; cout<< " Posicion : "; cin>> pos; insertarElemento(lista, _dato, pos); break;

cout<<endl<<endl; system("pause"); system("cls"); }while(op!=8);

system("pause"); return 0; } /* Name: Listas Enlazadas Circulares en c++ Copyright: casicodigo.blogspot.com Description: Inserta, elimina, busca, reporta */ #include <iostream> #include <stdlib.h> 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() { lista = NULL; int op; // opcion del menu

case 4: cout << "\n\n MOSTRANDO LISTA\n\n"; imprimirLista(lista); break;

case 5: cout<<"\n Valor a buscar: "; cin>> _dato; buscarElemento(lista, _dato); break; case 6: cout<<"\n Valor a eliminar: "; cin>> _dato; eliminarElemento(lista, _dato); break; case 7: cout<<"\n Valor repetido a eliminar: "; cin>> _dato; eliminaRepetidos(lista, _dato); break;

system("color 0b"); } 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<<" 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 FINAL*****\n"; cout<<"\nINGRESE DATO:"; cin>>nuevo->nro; nuevo->sgte=NULL;

} 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;

{ 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; 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);

} //////////////////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

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...!!!!"; }

Вам также может понравиться