Bienvenidos
Pilas
Las pilas son estructuras de datos que el modo de entrada a cualquier elementos es por un LIFO (Entra de ultimo y sale de primero ), permite almacenar y recuperar datos. Se aplica en
multitudes de casos, ya que se debe a su simplicidad y ordenamiento propia de la estructura.
Operaciones básicas de pilas
Las operaciones Básicas de pilas son las siguientes:
- Apilar: Incrementa la cima de la pila en 1 y asigna el nuevo elemento a la lista de la pila
- Desapilar: Copia primero el valor de cima de la pila en una variable local auxiliar, y a se presenta un decremento de la cima de la pila en 1.
- Inicializar pila: Vacia integramente la pila, para lo que pone cima al valor que se corresponda con pila vacia (-1).
- Pila llena: Verificar si la cima es -1. en ese caso la pila esta llena y se devuelve un 1 verdadero, en caso contrario, se devuelve en falso.
- Pila vacía: Verifica si la cima de la pila es -1. en este caso la pila vacia se devuelve un 1 en caso de ser verdadero de lo contrario falso
- Cima: Devuelve el elemento que se encuentra en la cima de la pila, no se modifica la pila.
Implemantacion
Implementacion mediante array o listas enlazadas. es una implementacion estática que se
realiza utilizando un array de un tamaño fijo pero con una Implementacion dinámica mediante listas enlazadas.
Ejercicio
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct productos
{
int codigo;
char nombre[50];
int existencia;
float precio;
};
struct nodo
{
struct productos dato;
struct nodo *proximo;
};
/* Declaracion de funciones */
void archivo(FILE *fp);
struct nodo *nuevonodo();
struct nodo *creapila(struct nodo *pri, struct productos x);
void muestra(struct nodo *pri, FILE *fp);
/* Fin de Declaracion */
main()
{
struct productos x;
struct nodo *pri=NULL;
FILE *fp;
char opcion; float auxiliar=0;
if((fp=fopen("C:\\Datos.txt","wb"))==NULL)
{
getch();
}
fseek(fp,0,2);
do
{
fflush(stdin);
printf("Ingrese el Codigo de Producto ");
scanf("%d",&x.codigo);
fflush(stdin);
printf("Ingrese Nombre de Producto ");
gets(x.nombre);
fflush(stdin);
printf("Ingrese la Existencia ");
scanf("%d",&x.existencia);
fflush(stdin);
printf("Ingrese el Precio ");
scanf("%f",&auxiliar); x.precio=auxiliar;
pri=creapila(pri,x);
fflush(stdin);
printf("Desea Ingresar otro Registro? (S/N) ");
scanf("%c",&opcion); opcion=toupper(opcion);
} while(opcion=='S');
muestra(pri,fp);
fflush(stdin);
printf("El contenido de la Pila se ha Guardado. Desea Visualizarlo? (S/N)");
scanf("%c",&opcion); opcion=toupper(opcion);
if(opcion=='S') archivo(fp);
getch();
fclose(fp);
}
struct nodo *creapila(struct nodo *pri, struct productos x)
{
struct nodo *p;
p=nuevonodo();
(*p).dato=x;
(*p).proximo=pri;
return p;
}
struct nodo *nuevonodo()
{
struct nodo *p;
p=(struct nodo *)malloc(sizeof(struct nodo));
if(p==NULL)
{
printf("Memoria RAM Llena");
getch();
exit(0);
}
return p;
}
void muestra(struct nodo *pri, FILE *fp)
{
struct nodo *aux;
while(pri!=NULL)
{
printf("Codigo: %d \n",(*pri).dato.codigo);
printf("Nombre: %s \n",(*pri).dato.nombre);
printf("Existencia: %d \n",(*pri).dato.existencia);
printf("Precio: %0.2f \n\n",(*pri).dato.precio);
fwrite(&pri->dato,sizeof(struct productos),1,fp);
aux=pri;
pri=(*pri).proximo;
free(aux);
}
}
void archivo(FILE *fp)
{
struct productos x;
printf("Datos del Archivo:\n\n");
fread(&x,sizeof(struct productos),1,fp);
while(!feof(fp))
{
printf("Codigo: %d \n",x.codigo);
printf("Nombre: %s \n",x.nombre);
printf("Existencia: %d \n",x.existencia);
printf("Precio: %0.2f \n\n",x.precio);
fread(&x,sizeof(struct productos),1,fp);
}
printf("Fin de Archivo");
}
SEGUN MIS ESTUDIOS ESTO ES VERDADERAMENTE
ResponderEliminarUNA GILIPOLLAS
que ha pasao
ResponderEliminarprint("dsafd")
ResponderEliminar