输出的这个值为什么不是栈顶的值?
关于实现栈的入栈和出栈的代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50 //存储数据元素的最大个数
typedef int ElementType;
typedef struct{
ElementType data [MaxSize];
int Top; //栈顶位置
}Stack;
//初始化一个栈
int InitStack(Stack &s) {
s.Top = -1; //初始化栈顶指针
}
//入栈
bool Push(Stack &s, ElementType &x) {
if(s.Top = MaxSize-1) {
return false;
}
s.data[++s.Top] = x; //指针先加1,再入栈
return true;
}
//出栈
ElementType Pop(Stack &s) {
if(s.Top == -1) {
return false;
}
return (s.data[s.Top--]);
}
//读取栈顶元素
int GetTop(Stack &s) {
if(s.Top == -1) {
return false;
}else {
return s.data[s.Top];
}
}
int main() {
Stack s;
int x;
InitStack(s);
printf("输入若干个整数,以负数结束,依次入栈: ");
scanf("%d", &x);
while(x >= 0) {
Push(s, x);
scanf("%d", &x);
}
printf("%d\n", GetTop(s));
printf("%3d\n", Pop(s));
printf("%d\n", GetTop(s));
}
编译执行后,输出如下:
第一次输出栈顶元素为46, 第二次是4201120。
请问这是什么原因?怎样修改才能正常的输出栈顶的值?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
入栈函数Push的第一句写错了。
你的是
应该是
栈的top指针指向的是栈定元素的在上一个位置。
一开始构造栈的时候,栈的top,base指针指向同一个位置,此时栈空。
当奖元素压入栈内,top自增指向第二个元素位置。
仔细看看push函数分析下push操作到底做了哪些事情。