经典抽象数据类型之堆栈实现(动态数组)
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;
}
** 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;
}
相关文章推荐
- 经典抽象数据类型之堆栈实现(静态数组)
- 动态数组实现堆栈
- 经典抽象数据类型之堆栈实现(单链表)
- 数据结构学习---堆栈的动态数组实现及链表实现
- 数据结构学习---堆栈的动态数组实现及链表实现
- 数据结构与算法之动态数组实现堆栈
- 动态数组实现的堆栈
- JavaScript的数组实现队列与堆栈的方法
- 链表实现动态的数组开辟!
- C语言中实现数组的动态增长
- C++:对象数组、对象动态申请和释放、类的定义和实现分开、this指针、常成员函数、时钟
- c语言中实现动态数组!(自己包的,共大家思考)
- VC动态数组实现
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现) .
- C实现动态分配三维数组
- 入门经典_Chap06_例题[二]:二叉树的指针及数组实现
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 动态数组实现stack
- 【c++小程序】1.动态数组实现图书录入程序