Documente Academic
Documente Profesional
Documente Cultură
INFORMATICA (PNFI)
ALGORITMICA Y PROGRAMACION
Algortmica y Programacin
Algortmica y Programacin
while(p)
{
cout<<cont++<<" - Valor = "<<p->i<<endl;
p=p->s;
}
cout<<"\n\nEso es todo";
getch();
}
int buscar(int d)
{
if (!i)
{
cout<<"No hay datos en la lista!!!";
getch();
return(0);
}
p=i;
a=NULL;
while(p->s && p->i<d)
{
a=p;
p=p->s;
}
return(p->i==d?1:0);
}
void insertar(int dat)
{
if(!i)
{
i=new(dato);
i->s=NULL;
i->i=dat;
return;
}
if(buscar(dat))
{
cout<<"\n\nDato existente";
getch();
return;
}
e=new(dato);
e->i=dat;
if(p==i && p->s)
{
Algortmica y Programacin
e->s=p;
i=e;
return;
}
if(p==i && !p->s)
{
if(p->i < e->i)
{
p->s=e;
e->s=NULL;
}
else
{
e->s=p;
i=e;
}
return;
}
if(p->s)
{
a->s=e;
e->s=p;
return;
}
if(e->i > p->i)
{
e->s=NULL;
p->s=e;
}
else
{
a->s=e;
e->s=p;
}
}
void borrar(void)
{
cout<<"\n\nIngrese dato a eliminar: ";
cin>>da;
if(buscar(da))
{
if(a)
a->s=p->s;
else
i=p->s;
Algortmica y Programacin
delete(p);
cout<<"\n\nDato eliminado";
}
else
cout<<"\n\nDato no se encuentra";
getch();
}
void guardar(void)
{
FILE *arch;
arch=fopen("DATOS-A.TXT","w");
if(!i)
{
cout<<"\n\nNO HAY LISTA PARA GUARDAR";
getch();
return;
}
p=i;
while(p)
{
fprintf(arch,"%i\n",p->i);
p=p->s;
}
cout<<"\n\nArchivo Guardado";
fclose(arch);
getch();
}
void cargar(void)
{
int c,x;
FILE *arch;
arch=fopen("DATOS-A.TXT","r");
if(!arch)
{
cout<<"\n\nNO EXISTE EL ARCHIVO";
getch();
return;
}
do
{
c=fscanf(arch,"%i\n",&x);
if(c!=EOF)
{
Algortmica y Programacin
insertar(x);
}
}
while (c!=EOF);
cout<<"\n\nArchivo Cargado";
fclose(arch);
getch();
}
3. Lista Doblemente Enlazada
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct direc
{
char nombre[30];
char calle[40];
char ciudad[20];
char estado[3];
char codigo[10];
struct direc *sig; //puntero a la siguiente entrada
struct direc *ante; //puntero al registro anterior
}entrada_lista;
struct direc *ppio; //puntero a la primera entrada de la lista
struct direc *final; //puntero a la ltima entrada de la lista
struct direc *buscar(char *); //puntero a una funcion
void intro(void),buscar(void),guardar(void);
void cargar(void),listar(void);
void borrar(struct direc **,struct direc **);
void dl_insert(struct direc *i,struct direc **ppio, struct direc **final);
void leecad(char *,char *,int),mostrar(struct direc *);
int menu (void);
main()
{
ppio=final=NULL; //inicializar los punteros
for(;;)
{
switch (menu())
{
case 1:intro();
Algortmica y Programacin
break;
case 2:borrar(&ppio,&final);
break;
case 3:listar();
getch();
break;
case 4:buscar(); //encuentra un nombre
getch();
break;
case 5:guardar(); //guarda la lista en un disco
break;
case 6:cargar(); //lee del disco
break;
case 7:exit(0); //fin de programa
}
}
}
//seleccionar una operacin
int menu(void)
{
char s[80];
int c;
printf("\n1. introducir un nombre\n");
printf("2. borrar un nombre\n");
printf("3. listar el archivo\n");
printf("4. buscar\n");
printf("5. guardar el archivo\n");
printf("6. cargar el archivo\n");
printf("7. salir\n");
do
{
printf("\nintroduzca su opcion: ");
gets(s);
c=atoi(s);
}
while(c<0 || c>7);
return(c);
}
//introducir nombres y direcciones
void intro(void)
{
struct direc *info;
for (;;)
{
Algortmica y Programacin
i->sig=NULL;
i->ante=NULL;
*final=i;
*ppio=i;
return;
}
p=*ppio; //principio de la lista
ant=NULL;
while (p)
{
if(strcmp(p->nombre,i->nombre)<=0)
{
ant=p;
p=p->sig;
}
else
{
if(p->ante)
{
p->ante=i;
i->sig=p;
i->ante=ant; //p->ante;
ant->sig=i; //p->ante=i;
return;
}
i->sig=p; //nuevo primer elemento
i->ante=NULL;
p->ante=i;
*ppio=i;
return;
}
}
ant->sig=i; //ponerlo en el final
i->sig=NULL;
i->ante=ant;
*final=i;
}
//elimina un elemento de la lista
void borrar(struct direc **ppio, struct direc **final)
{
struct direc *info, *buscar(char *nombre);
char s[80];
printf("introduzca nombre: ");
Algortmica y Programacin
gets(s);
info=buscar(s);
if(info)
{
if(*ppio==info)
{
*ppio=info->sig;
if (*ppio)
(*ppio)->ante=NULL;
else
*final=NULL;
}
else
{
info->ante->sig=info->sig;
if (info!=*final)
info->sig->ante= info->ante;
else
*final=info->ante;
}
free(info); //devolver memoria al sistema
}
}
//buscar una direccion
struct direc *buscar(char *nombre)
{
struct direc *info;
info=ppio;
while(info)
{
if(!strcmp(nombre,info->nombre))
return info;
info=info->sig; //obtener siguiente direccion
}
printf("nombre no encontrado\n");
return NULL; //no encontrado
}
//mostrar la lista entera
void listar(void)
{
struct direc *info;
info=ppio;
if (!info)
Algortmica y Programacin
{
printf("\n Lista Vaca\n");
return;
}
while(info)
{
mostrar(info);
info=info->sig; //obtener siguiente direccion
}
printf("\n Fin de Lista\n");
}
//esta funcion imprime realmente los campos de cada direccion
void mostrar(struct direc *info)
{
printf("%s ",info->nombre);
printf("%s ",info->calle);
printf("%s ",info->ciudad);
printf("%s ",info->estado);
printf("%s \n",info->codigo);
}
//buscar un nombre en la lista
void buscar(void)
{
char nombre[40];
struct direc *info, *buscar(char *nombre);
printf("introduzca nombre: ");
gets(nombre);
info=buscar(nombre);
if (!info)
printf("no encontrado\n");
else
mostrar(info);
}
//guardar el archivo en disco
void guardar(void)
{
struct direc *info;
FILE *fp;
fp=fopen("listac","wb");
if (!fp)
{
Algortmica y Programacin
dl_insert(info,&ppio,&final);
}
fclose(fp);
}
Algortmica y Programacin