Está en la página 1de 2

Insertar y Eliminar En Pos (mb) #include<iostream.h> #include<string.h> #include<conio.

h> class cNodo { void* info; cNodo* sig; public: cNodo(); void setinfo( void* newinfo ); void* getinfo(); void setsig( cNodo* newsig ); cNodo* getsig(); } cNodo:: cNodo() { info= NULL; sig= NULL; } void cNodo:: setinfo( void* newinfo ) { info= newinfo; } void* cNodo:: getinfo() { return(info); } void cNodo:: setsig( cNodo* newsig ) { sig= newsig; } cNodo* cNodo:: getsig() { return(sig); } class cListaDin { int Cant; cNodo* Primero; cNodo* Pos; cNodo* Ultimo; public: cListaDin(); int getCant(); int empty(); void SituarPos(int ipos); void agregar(void* info); void* eliminar(); void mostrar(); } cListaDin:: cListaDin() { Cant= 0; Primero= NULL; Pos= NULL; Ultimo= NULL; } int cListaDin:: getCant() { return(Cant); } int cListaDin:: empty() { if(Cant==0) return(1); else return(0); }

void cListaDin:: SituarPos(int ipos) { int max= Cant; if((ipos>=1)&&(ipos<=(max+1))) { if(!(empty())) { Pos= Primero; for(int i=1; i<ipos; i++) Pos= Pos->getsig(); } } } void cListaDin:: agregar(void* info) { cNodo* Aux; cNodo* newNodo= new cNodo; newNodo->setinfo(info); if(!(empty())) { if( Pos==Primero) { newNodo->setsig(Primero); Primero= newNodo; } else { if( Pos==NULL) { Ultimo->setsig(newNodo); Ultimo= newNodo; Pos= Ultimo; } else { Aux= Primero; while( Aux->getsig()!=Pos ) Aux= Aux->getsig(); Aux->setsig(newNodo); newNodo->setsig(Pos); } } } else { Primero= newNodo; Ultimo= Primero; Pos= Primero; } Cant++; }

void* cListaDin:: eliminar() { void* DatElm; cNodo* Aux; if(!(empty())) { if( Pos==Primero ) { Aux= Primero; DatElm= Aux->getinfo(); Primero= Primero->getsig(); delete(Aux); } else { if( Pos==Ultimo) { Aux= Primero; while( Aux->getsig()!=Pos ) Aux= Aux->getsig(); Ultimo= Aux; DatElm= Pos->getinfo(); delete(Pos); } else { Aux= Primero; while( Aux->getsig()!=Pos ) Aux= Aux->getsig(); DatElm= Pos->getinfo(); Aux->setsig( Pos->getsig() ); delete(Pos); } } Cant--; Pos= Primero; } return(DatElm); } void cListaDin:: mostrar() { cNodo* Aux; if(!(empty())) { Aux= Primero; while( Aux!=NULL) { char* AuxImp= new char; AuxImp= (char*)Aux->getinfo(); cout<<*(AuxImp)<<"\n"; Aux= Aux->getsig(); } } } int menu() { int op; cout<<"Que desea hacer\n"; cout<<"1. Agregar 1 Elemento\n"; cout<<"2. Eliminar 1 Elemento\n"; cout<<"3. Mostrar todos los Elementos\n"; do { cout<<"Escoja una opcion\n"; cin>> op; }while(op>3); return(op); }

void casos() { char deseo; int PosIns, PosElm; cListaDin oListaDin; cout<<"LISTA DINAMICA\n"; cout<<"INSERTA Y ELIMINA EN POS\n"; do { int op= menu(); switch(op) { case 1: cout<<"INSERTAR 1 ELEMENTO\n"; cout<<"Ingrese la posicion el la cual quiere insertar\n"; cin>> PosIns; if( (PosIns>=1) && (PosIns<=((oListaDin.getCant())+1)) ) { oListaDin.SituarPos( PosIns ); cout<<"Ingrese el dato a insertar\n"; char* pdato= new char; cin>>*(pdato); oListaDin.agregar( pdato ); } else cout<<"La posicion ingresada es incorrecta\n"; break; case 2: cout<<"ELIMINAR 1 ELEMENTO\n"; if (!(oListaDin.empty())) { cout<<"Ingrese la posicion del elemento a eliminar\n"; cin>> PosElm; if( (PosElm>=1) && (PosElm<=oListaDin.getCant()) ) { oListaDin.SituarPos (PosElm); char* aux= (char*)oListaDin.eliminar(); cout<<*(aux); } else cout<<"La posicin ingresada es incorrecta\n"; } else cout<<"No hay elementos que eliminar\n"; break; case 3: cout<<"MOSTRAR TODOS LOS ELEMENTOS\n"; if (!(oListaDin.empty())) oListaDin.mostrar(); else cout<<"No hay elementos que mostrar\n"; break; } cout<<"Desea hacer algo mas\n"; cin>> deseo; } while(deseo!='n'); } void main() { clrscr (); casos (); getch (); }

También podría gustarte