stack.h
#define STACK_TYPE char
extern void push(STACK_TYPE value);
extern void pop(void);
extern STACK_TYPE top(void);
int is_empty();
int is_full();
stack.c
#include "stack.h"
#include <assert.h>
#define STACK_SIZE 100 /*堆栈中数值的最大限制*/
//存储堆栈中的数组和一个指向堆栈顶部元素的指针
//所有不属于外部接口的内容都被声明为static,这可防止用户使用
//预定义接口之外的任何方式访问堆栈的值
static STACK_TYPE stack[STACK_SIZE];
static int top_element = -1;
int is_empty()
{
return top_element == -1;
}
int is_full()
{
return top_element == STACK_SIZE - 1;
}
void push(STACK_TYPE value)
{
assert(!is_full());
top_element += 1;
stack[top_element] = value;
}
void pop()
{
assert(!is_empty());
top_element -= 1;
}
STACK_TYPE top()
{
assert(!is_empty());
return stack[top_element];
}
test.c
#include "stack.h"
#include <stdio.h>
void main()
{
push('a');
push('b');
push('c');
push('d');
push('e');
pop();
pop();
printf("top = %c/n", top());
}