Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AUTORES: Alfaro Alonso Elvis Prncipe Orbegozo Luis Rodrguez Cosavalente Jham
Grficamente:
Obviamente, internamente no existen las palabras nodo, dato, direccin y siguiente, es solo una representacin. Como una lista es una estructura de datos dinmica, el tamao de la misma puede cambiar durante la ejecucin del programa. Definicin Lista Simple - Dinmica Es una secuencia de 0 o ms elementos de un tipo de dato determinado, formando un grupo unidos por una ligadura entre los diferentes elementos (llamados ahora Nodos); esto da lugar a la existencia de dos sub-elementos en el Nodo que son: dato (elemento dato) y ligadura (referencia), usando dinmicamente la memoria.
La lista consta de una coleccin de nodos situados en la memoria dinmica conectados entre s. Cada Nodo Cada nodo se compone de un dato y una referencia al siguiente nodo de la lista. El ltimo nodo de la lista contiene una referencia siguiente NULL.
Archivo desordenado
NRS n=NRS
Pensando en archivos insertamos registros: I(P), I(K), I(B), I(M). I(P): I(K):
I(B):
I(M):
En un archivo se pueden tener varias Listas: Que ordenan por Nombre Que ordenan por Apellido Que ordenan Descendentemente Ejemplo:
Implementacin en lenguaje C++: #include <cstdlib> #include <iostream> #include <io.h> #include <fcntl.h> #include <sys\stat.h> using namespace std; struct encabezado{ int PR; int NRS; }e; struct registro{ int NR; char nom[10]; int edad; int SR; }r,a,s; void escribir(){ system("cls"); char nomarch[10]; int fd,rpta=1,le,lr,x,band,pos; le=sizeof(struct encabezado); lr=sizeof(struct registro); cout<<"Ingrese el nombre del archivo a crear (Ejm:archivo.txt): "; gets(nomarch); if((fd=creat(nomarch,S_IWRITE|S_IREAD))<0){ cout<<"El archivo no se puede crear"; return; } lseek(fd,le,0); e.PR=-1; e.NRS=0; while(rpta==1){ fflush(stdin); r.NR=++e.NRS; cout<<"Ingrese el nombre:"; gets(r.nom); cout<<"ingrese la edad:"; cin>>r.edad; if(e.PR==-1){ r.SR=e.PR; e.PR=r.NR; } else{ x=e.PR;
band=0;//band=0 sifnifica que se debe actualizar //el encabezado while(x!=-1){ fflush(stdin); pos=(x-1)*lr+le; lseek(fd,pos,0); read(fd,&s,lr); if((strcmp(r.nom,s.nom))>0){ band=1; a=s; } else break; x=s.SR; } if(band==0){ r.SR=e.PR; e.PR=r.NR; } if(band==1){ r.SR=a.SR; a.SR=r.NR; pos=(a.NR-1)*lr+le; lseek(fd,pos,0); write(fd,&a,lr); } } pos=(r.NR-1)*lr+le; lseek(fd,pos,0); write(fd,&r,lr); cout<<"Desea seguir llenando registros?? si=1/no=0: "; cin>>rpta; } lseek(fd,0,0); write(fd,&e,le); close(fd); fflush(stdin); system("PAUSE"); } void leer(){ system("cls"); int le,lr,x,fd,pos; char nomarch[10]; le=sizeof(struct encabezado); lr=sizeof(struct registro); cout<<"Ingrese el nombre del archivo que desea abrir (Ejm:archivo.txt): "; gets(nomarch); if((fd=open(nomarch,O_TEXT))<0){ cout<<"El archivo no se puede crear"; return;
} read(fd,&e,le); x=e.PR; //x ir valiendo el valor de cada puntero while(x!=-1){ fflush(stdin); pos=(x-1)*lr+le; lseek(fd,pos,0); read(fd,&r,lr); cout<<r.nom<<" "<<r.edad<<" "<<endl; x=r.SR; } close(fd); fflush(stdin); system("PAUSE"); } void agregar(){ system("cls"); char nomarch[10]; int fd,pos,lr,le,x,band; lr=sizeof(struct registro); le=sizeof(struct encabezado); cout<<"Ingrese el nombre del archivo que desea abrir (Ejm: archivo.txt): "; gets(nomarch); if((fd=open(nomarch,O_RDWR))<0){ cout<<"El archivo no se puede crear"; return; } fflush(stdin); r.NR=++e.NRS; cout<<"Ingrese el nombre: "; gets(r.nom); cout<<"Ingrese la edad: "; cin>>r.edad; x=e.PR; band=0; while(x!=-1){ fflush(stdin); pos=(x-1)*lr+le; lseek(fd,pos,0); read(fd,&s,lr); if((strcmp(r.nom,s.nom))>0){ band=1; a=s; } else break; x=s.SR; } if(band==0){ r.SR=e.PR;
10
e.PR=r.NR; } if(band==1){ r.SR=a.SR; a.SR=r.NR; pos=(a.NR-1)*lr+le; lseek(fd,pos,0); write(fd,&a,lr); } pos=(r.NR-1)*lr+le; lseek(fd,pos,0); write(fd,&r,lr); lseek(fd,0,0); write(fd,&e,le); close(fd); system("PAUSE"); } void eliminar (){ system("cls"); char nom[10],nomarch[10]; int fd,pos,lr,le,x; lr=sizeof(struct registro); le=sizeof(struct encabezado); cout<<"Ingrese el nombre del archivo actualizar (Ejm:archivo.txt): "; gets(nomarch); if((fd=open(nomarch,O_RDWR))<0){ cout<<"El archivo no se puede crear"; return; } cout<<" Ingrese el nombre del registro a eliminar : "; gets(nom); read(fd,&e,le); x=e.PR; while(x!=-1){ pos=(x-1)*lr+le; lseek(fd,pos,0); read(fd,&r,lr); if((strcmp(r.nom,nom))==0){ if(r.NR==e.PR){ e.PR=r.SR; lseek(fd,0,0); write(fd,&e,le); } else{ a.SR=r.SR; pos=(a.NR-1)*lr+le; lseek(fd,pos,0); write(fd,&a,lr); break;
11
} } a=r; x=r.SR; } close(fd); system("PAUSE"); } void actualizar(){ system("cls"); int le,lr,x,fd,pos; char nomarch[10],nom[10]; le=sizeof(struct encabezado); lr=sizeof(struct registro); cout<<"Ingrese el nombre del archivo actualizar (Ejm:archivo.txt): "; gets(nomarch); if((fd=open(nomarch,O_RDWR))<0){ cout<<"El archivo no se puede crear"; return; } cout<<"Ingrese el nombre:"; gets(nom); read(fd,&e,le); x=e.PR; while(x!=-1){ fflush(stdin); if((strcmp(r.nom,nom))==0){ cout<<"ingrese la edad: "; cin>>r.edad; pos=(r.NR-1)*lr+le; lseek(fd,pos,0); write(fd,&r,lr); } x=r.SR; } close(fd); system("PAUSE"); } int menu_principal(){ int op; system("cls"); cout<<"::PROGRAMA DE MANIPULACION DE ARCHIVOS::"<<endl<<endl; cout<<"[1] Ingreso de datos"<<endl; cout<<"[2] Leer Datos"<<endl; cout<<"[3] Agregar Datos"<<endl; cout<<"[4] Eliminar por Nombre"<<endl; cout<<"[5] Actualizar"<<endl; cout<<"[6] Salir"<<endl<<endl; cout<<"Ingrese el numero de la opcion a ejecutar: ";
12
cin>>op; fflush(stdin); return op; } int main(int argc, char *argv[]){ int op=0; system("cls"); do{ op=menu_principal(); switch(op){ case 1: {escribir();} break; case 2: {leer();} break; case 3: {agregar();} break; case 4: {eliminar();} break; case 5: {actualizar();} break; case 6: {cout<<"Programa finalizado"<<endl;} break; default:{};break; } } while (op!=6); system("PAUSE"); return EXIT_SUCCESS; }