| Ejemplos de C - Listas, pilas y colas II |
1.- Programa que mete números en una pila y los visualiza:
#include<stdio.h>
#include<stdlib.h>
struct nodo
{
int nro;
struct nodo *p_anterior_nodo;
struct nodo *p_siguiente_nodo;
};
int fmenu();
struct nodo *fponer(struct nodo *p_cima_pila);
void fvisualizar(struct nodo *p_cima_pila);
void fliberar(struct nodo *p_cima_pila);
void main()
{
int opcion;
struct nodo *p_cima_pila=NULL;
do
{
opcion=fmenu();
switch(opcion)
{
case 1: p_cima_pila=fponer(p_cima_pila);
break;
case 2: fvisualizar(p_cima_pila);
break;
case 3: fliberar(p_cima_pila);
puts("FINAL DEL PROCESO DE PILAS");
break;
default: puts("OPCION ERRONEA");
}
}while(opcion!=3);
}
int fmenu()
{
int opcion;
puts("OPERACIONES CON NUMEROS");
puts("---------------------------------------------");
puts("1.- PEDIR NUMEROS");
puts("2.- VISUALIZAR NUMEROS");
puts("3.- FINALIZAR");
puts("TECLEE LA OPERACION QUE DESEE REALIZAR");
scanf("%d",&opcion);
return(opcion);
}
struct nodo *fponer(struct nodo *p_cima_pila)
{
char res;
int aux;
struct nodo *p_nuevo_nodo;
do
{
puts("Que numero quieres guardar?");
scanf("%d",&aux);
p_nuevo_nodo=(struct nodo *)malloc(sizeof(struct nodo));
if (p_nuevo_nodo==NULL)
{
puts("NO HAY MEMORIA PARA MAS NUMEROS");
break;
}
p_nuevo_nodo->nro=aux;
if (p_cima_pila==NULL)
{
p_cima_pila=p_nuevo_nodo;
p_cima_pila->p_anterior_nodo=NULL;
p_cima_pila->p_siguiente_nodo=NULL;
}
else
{
p_nuevo_nodo->p_anterior_nodo=p_cima_pila;
p_nuevo_nodo->p_siguiente_nodo=NULL;
p_cima_pila->p_siguiente_nodo=p_nuevo_nodo;
p_cima_pila=p_nuevo_nodo;
}
fflush(stdin);
puts("Quieres guardar otro numero?");
res=getchar();
}while(res=='s' || res=='S');
return(p_cima_pila);
puts("FINAL DEL PROCESO DE INSERTAR NODOS");
}
void fvisualizar(struct nodo *p_cima_pila)
{
puts("LOS NUMEROS QUE QUEDAN SON:");
while (p_cima_pila!=NULL)
{
printf("%d\n",p_cima_pila->nro);
p_cima_pila=p_cima_pila->p_anterior_nodo;
}
puts("FINAL DEL PROCESO DE VISUALIZAR");
}
void fliberar(struct nodo *p_cima_pila)
{
struct nodo *p_aux;
while(p_cima_pila!=NULL)
{
p_aux=p_cima_pila->p_anterior_nodo;
free(p_cima_pila);
p_cima_pila=p_aux;
}
puts("YA SE HA LIBERADO LA MEMORIA");
}
2.- Programa de gestión de los pacientes de una consulta médica:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct nodo
{
char nom[15];
char ape[15];
char dir[30];
char diag[50];
char trata[25];
int num;
struct nodo *sgte;
struct nodo *anterior;
};
int fmenu();
void registrar(struct nodo **primero,struct nodo **ultimo,int *aux);
void atender(struct nodo **primero);
void liberar(struct nodo *primero);
void main()
{
struct nodo *primero,*ultimo;
int aux;
int res;
aux=1;
primero=NULL;
ultimo=NULL;
do
{
res=fmenu();
switch(res)
{
case 1: registrar(&primero,&ultimo,&aux);
break;
case 2: atender(&primero);
break;
case 3: puts("\n fin del programa");
break;
default: puts("\n opcion erronea");
}
}while(res!=3);
}
int fmenu()
{
int opcion;
printf("\n GESTION DECONSULTA MEDICA");
printf("\n ---------------------------");
printf("\n 1.- REGISTRAR LLEGADA DE UN PACIENTE");
printf("\n 2.- REGISTRAR ATENCION DE UN PACIENTE");
printf("\n 3.- FINALIZAR");
printf("\n teclee la opcion deseada: ");
scanf("%d", &opcion);
return(opcion);
}
void registrar(struct nodo **primero,struct nodo **ultimo,int *aux)
{
struct nodo *nuevo;
char nombre[15];
char apel[15];
char dire[30];
printf("\n nombre: ");
fflush(stdin);
gets(nombre);
printf("\n apellido: ");
fflush(stdin);
gets(apel);
printf("\n direccion: ");
fflush(stdin);
gets(dire);
nuevo=(struct nodo *)malloc(sizeof(struct nodo));
if(nuevo==NULL)
{
puts("\n no hay memoria");
goto fin;
}
strcpy(nuevo->nom,nombre);
strcpy(nuevo->ape,apel);
strcpy(nuevo->dir,dire);
nuevo->num=aux;
if(*primero==NULL)
{
(*primero)=nuevo;
nuevo->anterior=NULL;
nuevo->sgte=NULL;
*ultimo=nuevo;
}
else
{
nuevo->anterior=*ultimo;
nuevo->sgte=NULL;
(*ultimo)->sgte=nuevo;
*ultimo=nuevo;
}
aux++;
fin:puts("\n fin");
}
void atender(struct nodo **primero)
{
char diagn[50];
char trat[25];
puts("\n diagnostico: ");
fflush(stdin);
gets(diagn);
puts("\n tratamiento: ");
fflush(stdin);
gets(trat);
strcpy((*primero)->diag, diagn);
strcpy((*primero)->trata,trat);
printf("\n INFORME MEDICO");
printf("\n -----------------");
printf("\n 1.- DATOS PERSONALES");
printf("\n ----------------------");
printf("\n NOMBRE: %s",(*primero)->nom );
printf("\n APELLIDOS: %s",(*primero)->ape);
printf("\n DIRECCION: %s",(*primero)->dir);
printf("\n 2.- DIAGNOSTICO: %s",(*primero)->diag);
printf("\n -----------------");
printf("\n 3.- TRATAMIENTO: %s",(*primero)->trata);
printf("\n ------------------");
*primero=(*primero)->sgte;
(*primero)->anterior=NULL;
}