输出的这个值为什么不是栈顶的值?

发布于 2022-09-02 19:35:56 字数 1236 浏览 16 评论 0

关于实现栈的入栈和出栈的代码如下:

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

等待我真够勒 2022-09-09 19:35:56

入栈函数Push的第一句写错了。
你的是

if(s.Top = MaxSize-1) {
    return false;
}

应该是

if(s.Top == MaxSize-1) {
    return false;
}
℉服软 2022-09-09 19:35:56

栈的top指针指向的是栈定元素的在上一个位置。
一开始构造栈的时候,栈的top,base指针指向同一个位置,此时栈空。
当奖元素压入栈内,top自增指向第二个元素位置。
仔细看看push函数分析下push操作到底做了哪些事情。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文