Ir al contenido principal

Programación en c++: Listas Dobles - Insertar, eliminar, modificar, repetidos y burbuja





#include<iostream.h>
#include<conio.h>
struct nodo{
     int nro;
    struct nodo*sgte;
    };

typedef struct nodo*TLista;
void insertaAlInicio(TLista &,int);
void insertaAlFinal(TLista &,int);
void insertaEnPosicion(TLista &, int, int);
void eliminaElemento(TLista &, int);
void eliminaLista(TLista &);
void eliminaRepetidos(TLista);
void burbuja(TLista);
void imprimir(TLista);
void modificar(TLista &,int, int);
void main(void)
{
clrscr();
getche();
TLista lista=NULL;
int opc,valor,pos,ps;
do
{
cout<<"PROGRAMA QUE REALIZA FUNCIONES PRINCIPALES CON LISTAS ENLAZADAS "<<endl;
cout<<"--------------------------------------------------------------- "<<endl<<endl;
cout<<"****  MENU ****"<<endl;
cout<<"1. Inserta al inicio"<<endl;
cout<<"2. Inserta al final"<<endl;
cout<<"3. Inserta en una posicion "<<endl;
cout<<"4. Listado"<<endl;
cout<<"5. Elimine elemento que ud desee: "<<endl;
cout<<"6. Elimina toda la lista "<<endl;
cout<<"7. Elimina elementos repetidos  "<<endl;
cout<<"8. Ordena por burbuja "<<endl;
cout<<"9. Modifcar elemento"<<endl;
cout<<"10. Salir"<<endl;
cout<<"ingrese su opcion: ";
cin>>opc;

switch(opc)
{
case 1: clrscr();cout<<"ingrese valor a insertar al inicio: \n";
cin>>valor;
insertaAlInicio(lista,valor);
break;
case 2: clrscr();cout<<"ingrese valor a insertar al final: \n";
cin>>valor;
insertaAlFinal(lista,valor);
break;
case 3: clrscr();cout<<"valor a insertar: \n";
cin>>valor;
cout<<"Posicion:\n ";cin>>pos;
insertaEnPosicion(lista,valor,pos);
break;
case 4: clrscr();cout<<endl<<"Listado \n"<<endl;
imprimir(lista) ;
break;
case 5: clrscr();cout<<endl<<"Elimina elemento :"<<endl;
        cout<<"valor del elemento ";cin>>valor;
eliminaElemento(lista, valor);
break;
case 6: clrscr();cout<<endl<<"..Elimina la lista "<<endl;
        eliminaLista(lista);
break;
case 7: clrscr();cout<<endl<<"..Eliminando"<<endl;
        eliminaRepetidos(lista);
        break;
case 8: clrscr();cout<<endl<<"Lista ordenada "<<endl;
burbuja(lista);
imprimir(lista);break;
case 9:clrscr();cout<<"Ingrese la posicion a modificar:"<<endl;
       cin>>ps;
       cout<<"Ingrese el valor a ingresar:"<<endl;
       cin>>valor;
       modificar(lista,valor,ps);break;
      }
   }while(opc!=10);
}

void imprimir(TLista lista)
{ while (lista!=NULL)
   {cout<<lista->nro<<endl;
   lista=lista->sgte;
   }
cout<<endl;
}

void insertaAlInicio(TLista &lista, int valor)
{
TLista q;
q=new(struct nodo);
q->nro=valor;
q->sgte=lista;
lista=q;
}

void insertaAlFinal(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;
      }
}

void insertaEnPosicion(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 {t=lista;
      for(i=1;t!=NULL;i++)
      { if(i==pos-1) { q->sgte=t->sgte;
      t->sgte=q;
      return; }

      t=t->sgte;
      }
   }
cout<<"ERROR posicion erronea"<<endl;
}

void eliminaElemento(TLista & lista , int valor)
{
TLista p,ant;
p=lista;
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;
}
 }

void eliminaLista(TLista &lista)
{
TLista p;
while (lista!=NULL)
 { p=lista;
lista=lista->sgte;
delete(p);
}
 }

void eliminaRepetidos(TLista lista)
{ TLista q,p,r,ant;
  int num;
  q=lista;
  while(q!=NULL)
  { num=q->nro;
    ant=q;
    r=q->sgte;
    while(r!=NULL)
    { if(num==r->nro)
      { ant->sgte=r->sgte;
      cout<<"Eliminando..."<<num<<endl;
      p=r;
      r=r->sgte;
      delete(p);
      }
    else { ant=r;
  r=r->sgte;
  }
    r=r->sgte;
    } //fin while
    q=q->sgte;
    } //fin while
  }

void burbuja(TLista lista)
{
TLista actual,siguiente,marca;
int t;
marca=NULL;
while(marca!=lista->sgte)
{ actual=lista;
  siguiente=actual->sgte;
  while(siguiente!=marca)
  { if(actual->nro>siguiente->nro)
     { t=siguiente->nro;
       siguiente->nro=actual->nro;
       actual->nro=t;
       }
     actual=actual->sgte;
     siguiente=actual->sgte;
     }
     marca=actual;
     }
  }//fin burbuja

void modificar(TLista &lista,int v,int ps)
{ TLista q,sgte;
  q=lista;
  int i;
  for(i=0;i<ps-1&&q->sgte!=NULL;i++)
     q=q->sgte;
     q->nro=v;
}

Comentarios

Entradas más populares de este blog

Lenguaje de Programacion en Java: Ecuación de primer grado

public class Main {     public static void main(String[] args) {         float x,a,e;                   Scanner teclado = new Scanner(System.in);         System.out.println("Coeficiente de X:");         x=teclado.nextInt();         System.out.println("Término independiente:");         a=teclado.nextInt();         if(a==0)           System.out.println("No es una ecuación de primer grado");           else         {              e=-a/x;              System.out.println("La raíz es=" +e);         }                                     } ...

Programacion: Arbol binario - Programacion en c++

1.- Hacer un programa que permita buscar un elemento, el elemento mayor, el elemento menor y el menor de los mayores de un árbol binario. #include <iostream.h> #include <conio.h> struct nodo     {      int valor;      struct nodo* izq;      struct nodo* der;     }; typedef struct nodo *ABB; void inserta(ABB& ,int); void preorden(ABB); void postorden(ABB); void enorden(ABB); void verarbol(ABB,int); int buscar(ABB,int); int buscarmayor(ABB); int buscarmenor(ABB); void podar(ABB&,int); void main() { ABB arbol=NULL; ABB subarbol=NULL; int n,x,opc,a;   do     {      cout<<"menu principal"<<endl;      cout<<"1.ingresar elementos"<<endl;      cout<<"2.pre orden"<<endl;      cout<<"3.mostrar hojas"<...

Programación en c++ : While - series: límite del numerador

1.- Hacer un programa que nos permita ingresar el límite del numerador hasta donde queremos que se realice la suma, sólo el numerador tendrá el límite, el denominador no cambiará, por ejemplo; 1/2 , 2/2, 3/2, 4/2 ..... #include<iostream>  #include<conio.h> int main()  {  int num=0,suma=0,denominador=2,limite;  clrscr();  cout<<"Ingrese el limite del numerador: ";  cin>>limite; while (num<=limite)  {  cout<<num<<"/"<<denominador<<endl;  suma=suma+num;  num=num+1; }  cout<<"Suma total: "<<suma<<"/"<<denominador<<endl;  getch();  }