判断堆栈是否满或空
/*
**
** 静态数组实现堆栈程序 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()岂不是变成假了,
那断言不就总提示出错了吗??