判断堆栈是否满或空

passion11 passion11 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
/*
**
** 静态数组实现堆栈程序 a_stack.c ,数组长度由#define确定
*/

#include"stack.h"
#include<assert.h>
#include<stdio.h>

#define STACK_SIZE 100 /* 堆栈最大容纳元素数量 */

/*
** 存储堆栈中的数组和一个指向堆栈顶部元素的指针
*/
static STACK_TYPE stack[STACK_SIZE];
static int top_element = -1;

/* push */
void push(STACK_TYPE value)
{
assert(!is_full()); /* 压入堆栈之前先判断是否堆栈已满*/
top_element += 1;
stack[top_element] = value;
}

/* pop */
void pop(void)
{
assert(!is_empty()); /* 弹出堆栈之前先判断是否堆栈已空 */
top_element -= 1;
}

/* top */
STACK_TYPE top(void)
{
assert(!is_empty());
return stack[top_element];
}

/* is_empty */
int is_empty(void)
{
return top_element == -1;
}

/* is_full */
int is_full(void)
{
return top_element == STACK_SIZE - 1;
}
《c和指针》中的一个例子。
上面的程序中用 assert(!is_empty());判读堆栈是否为空,
assert(!is_full());判读堆栈是否为满,这可行吗????
!是逻辑非操作,只要assert的参数不为零,assert断言总是真的,就不会提示错误了
is_full返回值是STACK_SIZE - 1;大都会非零的值,那就表示真,!is_full()岂不是变成假了,
那断言不就总提示出错了吗??
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
passion11
C++ Builder 13,871 成员 102,696 内容