#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.