动态数组实现堆栈

来源:互联网 发布:宏景软件科技有限公司 编辑:程序博客网 时间:2024/05/16 05:41

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());

}