您的位置:首页 > 其它

经典抽象数据类型之堆栈实现(动态数组)

2013-04-11 10:55 253 查看
/*

** author: gooly.oh

** description: 一个动态分配数组实现的堆栈

** 堆栈的长度在创建堆栈的函数被调用时给出,该函数必须在任何其他操作堆栈函数之前调用

*/

#define STACK_TYPE
int

static STACK_TYPE
*stack;

static size_t
stack_size;

static int
top_element = -1;

/*

** create_stack

*/

void

create_stack(size_t size)

{

assert(stack_size == 0);

stack_size = size;

stack = (STACK_TYPE *)malloc(stack_size * sizeof(STACK_SIZE));

assert( stack != NULL);

}

/*

** destory_stack

*/

void

destory_stack(void)

{

assert(stack_size > 0);

stack_size = 0;

free(stack);

stack = NULL;

}

/*-----------------------------------------------------------------------

**name: push

**function: 把一个新值压栈

**param: 被压入的值

*/

void

push(STACK_TYPE value)

{

assert(!is_full());

stack[++top_element] = value;

}

/*-----------------------------------------------------------------------

**name: pop

**function: 从堆栈中弹出一个值,并将其丢弃

*/

void

pop(void)

{

assert(!is_empty());

top_element--;

}

/*-----------------------------------------------------------------------

**name: top

**function: 返回堆栈顶部元素的值,但不对堆栈进行修改

*/

STACK_TYPE top(void)

{

assert(!is_empty());

return stack[top_element];

}

/*-----------------------------------------------------------------------

**name: is_empty

**function: 如果堆栈为空,返回TRUE,否则返回FALSE

*/

int

is_empty(void)

{

assert(stack_size > 0);

return top_element == -1;

}

/*-----------------------------------------------------------------------

**name: is_full

**function: 如果堆栈已满,返回TRUE,否则返回FALSE

*/

int is_full(void)

{

assert(stack_size > 0);

return top_element = STACK_SIZE - 1;

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