/* Biblioteca Estática. Esta biblioteca oferece as
operações básicas de pilha para uma
pilha de inteiros (facilmente alterável) */
typedef int stack_data;
extern void stack_init();
/* Inicializa esta biblioteca.
Chama primeiro antes de chamar qualquer outra coisa. */
extern void stack_clear();
/* Apaga todas as entradas da pilha. */
extern int stack_empty();
* Retorna 1 se a pilha estiver vazia, caso contrário, 0. */
extern void stack_push(stack_data d);
/* Força o valor d na pilha. */
extern stack_data stack_pop();
/* Retorna o elemento de cima da pilha,
e o remove. Retorna lixo se a pilha estiver vazia. */
O arquivo de código da biblioteca vem a seguir:
#include "stack.h" #include<stdio.h> /* Biblioteca Estática. Esta biblioteca oferece as operações básicas de pilha para uma pilha de inteiros */ struct stack_rec { stack_data data; struct stack_rec *next; }; struct stack_rec *top=NULL; void stack_init() /* Inicializa esta biblioteca. Chama antes de chamar qualquer outra coisa. */ { top=NULL; } void stack_clear() /* Apaga todas as entradas da pilha. */ { stack_data x; while (!stack_empty()) x=stack_pop(); } int stack_empty() /* Retorna 1 se a pilha estiver vazia, caso contrário, 0. */ { if (top==NULL) return(1); else return(0); } void stack_push(stack_data d) /* Força o valor d na pilha. */ { struct stack_rec *temp; temp= (struct stack_rec *)malloc(sizeof(struct stack_rec)); temp->data=d; temp->next=top; top=temp; } stack_data stack_pop() /* Retorna o elemento de cima da pilha, e o remove. Retorna lixo se a pilha estiver vazia. */ { struct stack_rec *temp; stack_data d=0; if (top!=NULL) { d=top->data; temp=top; top=top->next; free(temp); } return(d); }
Observe como esta biblioteca realiza a ocultação de informações: quem vir apenas o arquivo de cabeçalho não poderá dizer se a pilha é implementada com matrizes, ponteiros, arquivos ou de outro modo. Observe também que a linguagem C usa NULL. NULL está definido em stdio.h, de forma que quase sempre você terá que incluir stdio.h quando usar ponteiros. NULL é o mesmo que zero.
|
|