Logo elrincondelc.com
curso de programación en c
Foros de programación en C
Inicio :: Código fuente

Valoración
4

Listas Enlazadas Simples

codigo enviada por: algoritmo
Todo lo que se puede hacer con listas enlazadas simples: crear, añadir, insertar, eliminar, modificar, recorrer, guardar, mostrar. En Dev-C++ 4.0
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <conio.c>
#include <string.h>

struct Lista{
   char dato[20];
   Lista *sig;
};

Lista *cab,*ult,*aux,*u;
int contador;

void crear(){
   cab = NULL;
   ult = NULL;
   contador = 0;
}

void aniadir_inicio(){
   Lista *A,*B;
   A = new Lista;
   B = NULL;
   cout<<"ntIngrese palabra: ";
   gets(A->dato);
   A->sig = NULL;
   if(cab == NULL){
      cab = A;
      ult = A;
   }else{
      B = cab;
      A->sig = B;
      B = A;
      cab = B;
   }
   contador++;
}

void aniadir_final(){
   Lista *A;
   A = new Lista;
   cout<<"ntIngrese palabra: ";
   gets(A->dato);
   A->sig = NULL;
   if(cab == NULL){
      cab = A;
      ult = A;
   }else{
      ult->sig = A;
      ult = A;
   }
   contador++;
}

void aniadir_antes(){
   int posicion,i=2,j=2,k=2,l=0;
   Lista *A,*B;
   A = new Lista;
   B = NULL;
   cout<<"ntIngrese palabra: ";
   gets(A->dato);
   A->sig = NULL;
   cout<<"tIngrese posicion: ";
   cin>>posicion;
   if(posicion == 1){
      if(cab == NULL){
      cab = A;
      ult = A;
      }else{
         B = cab;
         A->sig = B;
         B = A;
         cab = B;
      }
   }else{
      B = cab;
      while(i<=posicion){
         B = B->sig;
         i++;
      }
      A->sig = B;
      B = A;
      while(k<=posicion){
         aux = cab;
         while(j<posicion-l){
            aux = aux->sig;
            j++;
         }
         aux->sig = B;
         B = aux; 
         l++;
         k++;
         j=2;
      }
      aux = cab;
      cab = B;
   }
   contador++;
}

void aniadir_despues(){
   int posicion,i=2,j=2,k=2,l=0;
   int posicion2;
   Lista *A,*B;
   A = new Lista;
   B = NULL;
   cout<<"ntIngrese palabra: ";
   gets(A->dato);
   A->sig = NULL;
   cout<<"tIngrese posicion: ";
   cin>>posicion;
   posicion2 = posicion + 1;
   if(posicion == 1){
      if(cab == NULL){
         cab = A;
         ult = A;
      }else{
         u = cab;
         B = cab;
         A->sig = B->sig;
         B = A;
         u->sig = B;
         B = u;
         cab = B;
      }
   }else{
      B = cab;
      while(i<=posicion2){
         B = B->sig;
         i++;
      }
      A->sig = B;
      B = A;
      while(k<=posicion2){
         aux = cab;
         while(j<posicion2-l){
            aux = aux->sig;
            j++;
         }
         aux->sig = B;
         B = aux; 
         l++;
         k++;
         j=2;
      }
      aux = cab;
      cab = B;
   }
   contador++;
}

void elimina_inicio(){
   Lista *P,*Q;
   if(cab == NULL){
      cout<<"ntNo hay datos"<<endl;
      getch();
   }else{
      P = cab;
      Q = P->sig;
      delete P;
      P = Q;
      cab = P;
      contador--;
   }
}

void elimina_final(){
   Lista *P,*Q,*R;
   int i=1;
   if(cab == NULL){
      cout<<"ntNo hay datos"<<endl;
      getch();
   }else{
      P = cab;
      Q = cab;
      if(contador == 1){
         cab = P->sig;
         delete P;
         cab = NULL;
         contador--;
      }
      else{
         while(i<contador-1){
            P = P->sig;
            i++;
         }
         P->sig = NULL;
         P = P->sig;
         R = P;
         delete R;
         P = Q;
         cab = P;
         contador--;
      }
   }
}

void eliminar(){
   int posicion,i1=2,i2=2,j=2,k=2,l=0;
   Lista *P,*Q,*R;
   cout<<"ntIngrese posicion: ";
   cin>>posicion;
   P = cab;
   u = cab;
   if(posicion == 1){
      cab = P->sig;
      delete P;
      cab = NULL;
      contador--;
   }else{
      Q = cab;
      while(i1<=posicion+1){
         Q = Q->sig;
         i1++;
      }
      Q->sig = NULL;
      //Q = Q->sig;
      P = Q;
      Q = cab;
      while(i2<=posicion){
         Q = Q->sig;
         i2++;
      }
      Q->sig = NULL;
      Q = Q->sig;
      R = Q;
      delete R;
      Q = u;
      while(k<posicion){
         aux = Q;
         while(j<posicion-l){
            aux = aux->sig;
            j++;
         }
         aux->sig = P;
         P = aux;
         l++;
         k++;
         j=2;
      }
      aux = u;
      aux->sig = P;
      P = aux;
      cab = P;
   }
}

void modificar(){
   int band = 1;
   char modifica[20];
   u = cab;
   cout<<"ntIngrese palabra a modificar: ";
   gets(modifica);
   while(u!=NULL){
      if(strcmp(modifica,u->dato)==0){
         cout<<"tIngrese reemplazo: ";
         gets(u->dato);
         band = 0;
      }
      u = u->sig;
   }
   if(band == 1){
      cout<<"ntNo se encontraron coincidencias";
      getch();
   }
}

void recorrer(){
   u = cab;
   cout<<"nt";
   while(u!=NULL){
      cout<<u->dato<<" ";
      u = u->sig;
   }
   getch();
}

void guardar(){
   FILE *F;
   char cadena[20];
   if((F=fopen("C:/DATOS.DAT","w"))==NULL){
      cout<<"ntERROR, no se puede abrir el archivo";
      getch();
   }else{
      u = cab;
      while(u!=NULL){
         strcpy(cadena,u->dato);
         fwrite(&cadena,sizeof(cadena),1,F);
         u = u->sig;
      }
      fclose(F);
   }
}

void mostrar(){
   FILE *F;
   char cadena[20];
   if((F=fopen("C:/DATOS.DAT","r"))==NULL){
      cout<<"ntERROR, no se puede abrir el archivo";
      getch();
   }else{
      fread(&cadena,sizeof(cadena),1,F);
      cout<<"nt";
      while(!feof(F)){
         cout<<cadena<<" ";
         fread(&cadena,sizeof(cadena),1,F);
      }
      fclose(F);
      getch();
   }
}

void menu(){
   int opcion = 0;
   crear();
   do{
      do{
         system("cls");
         cout<<"ntttMENUn"<<endl;
         cout<<"tAniadir al inicio ................... [1] "<<endl;
         cout<<"tAniadir al final .................... [2] "<<endl;
         cout<<"tAniadir antes de .................... [3] "<<endl;
         cout<<"tAniadir despues de .................. [4] "<<endl;
         cout<<"tEliminar al inicio .................. [5] "<<endl;
         cout<<"tEliminar al final ................... [6] "<<endl;
         cout<<"tEliminar ............................ [7] "<<endl;
         cout<<"tModificar ........................... [8] "<<endl;
         cout<<"tRecorrer lista ...................... [9] "<<endl;
         cout<<"tGuardar ............................. [10]"<<endl;
         cout<<"tMostrar ............................. [11]"<<endl;
         cout<<"tSalir ............................... [12]"<<endl;
         cout<<"ntIngrese opcion: ";
         cin>>opcion;
      }while(opcion<1 || opcion>12);
      switch(opcion){
         case 1:  aniadir_inicio(); break;
         case 2:  aniadir_final(); break;
         case 3:  aniadir_antes(); break;
         case 4:  aniadir_despues(); break;
         case 5:  elimina_inicio(); break;
         case 6:  elimina_final(); break;
         case 7:  eliminar(); break;
         case 8:  modificar(); break;
         case 9:  recorrer(); break;
         case 10: guardar(); break;
         case 11: mostrar(); break;
      }
   }while(opcion!=12);
}

void main(){
   system("color F0");
   textcolor(496);
   menu();
}



















Para enviar comentarios debes estar registrado.

(c) ElRincondelC.com

Un proyecto de Urlan Heat : proyectos de Internet y soporte para el comercio electrónico.