您的位置:首页 > 其它

动态数组实现堆栈

2010-08-13 13:41 281 查看
dy_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();

extern void create_stack(int size);//unsigned int
extern void destroy_stack();

dy_stack.c
#include "dy_stack.h"
#include <assert.h>
#include <malloc.h>
#include <stdio.h>


//#define STACK_SIZE 100 /*堆栈中数值的最大限制*/

//存储堆栈中的数组和一个指向堆栈顶部元素的指针
//所有不属于外部接口的内容都被声明为static,这可防止用户使用
//预定义接口之外的任何方式访问堆栈的值
static int stack_size = 0;
static STACK_TYPE *stack;
static int top_element = -1;

void create_stack(int size)
{
assert(stack_size == 0);
stack_size = size;
stack = malloc(stack_size * sizeof(STACK_TYPE));
assert(stack != NULL);
}

void destroy_stack(void)
{
assert(stack_size > 0);
stack_size = 0;
free(stack);
stack = (STACK_TYPE *)NULL;
}

int is_empty()
{
assert(stack_size > 0);
return top_element == -1;
}

int is_full()
{
assert(stack_size > 0);
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 "dy_stack.h"
#include <stdio.h>

void main()
{
create_stack(100);

push('a');
push('b');
push('c');
push('d');
push('e');

pop();
pop();

printf("top = %c/n", top());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: