6-2 另类堆栈 分数 15 作者 DS课程组 单位 浙江大学 在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满? 函数接口定义: bool Push( Stack S, ElementType X ); ElementType Pop( Stack S ); 其中Stack结构定义如下: typedef int Position; typedef struct SNode *PtrToSNode; struct SNode { ElementType *Data; /* 存储元素的数组 */ Position Top; /* 栈顶指针 */ int MaxSize; /* 堆栈最大容量 */ }; typedef PtrToSNode Stack; 注意:如果堆栈已满,Push函数必须输出“Stack Full”并且返回false;如果队列是空的,则Pop函数必须输出“Stack Empty”,并且返回ERROR。
时间: 2024-01-30 10:02:19 浏览: 215
嵌入式系统/ARM技术中的uC/OS-II任务栈处理的一种改进方法
下面是实现另类堆栈的代码:
```
bool Push(Stack S, ElementType X) {
if (S->Top == S->MaxSize - 1) {
printf("Stack Full\n");
return false;
} else {
S->Data[++S->Top] = X;
return true;
}
}
ElementType Pop(Stack S) {
if (S->Top == -1) {
printf("Stack Empty\n");
return ERROR;
} else {
return S->Data[S->Top--];
}
}
```
判断堆栈是否为空或满的方法:
- 如果堆栈为空,Top 的值为 -1。
- 如果堆栈已满,Top 的值为 MaxSize - 1。
因此,在 Push 操作时,如果 Top 已经等于 MaxSize - 1,则说明堆栈已满,无法再进行入栈操作。在 Pop 操作时,如果 Top 的值为 -1,则说明堆栈为空,无法进行出栈操作。
阅读全文