江风.! 2023-05-07 16:46 采纳率: 100%
浏览 19
已结题

顺序栈出栈为什么返回不正常值?

对于顺序栈,基本的初始化、入栈出栈代码如下,但执行结果为不正常值,小小问题求解答。

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 50
typedef int ElemType;
typedef struct
{
    ElemType data[Maxsize];
    int top;
}SqStack;
void InitStack(SqStack& S)    //初始化栈
{
    S.top = -1;//使栈为空
}
bool StackEmpty(SqStack S)    //判断栈是否为空
{
    if (S.top == -1)
    {
        return true;
    }
    else
    {
        return false;
    }
}
bool Push(SqStack &S, ElemType x)//将元素x入栈,并返回是否成功(防止栈满的情况)。
{
    if (S.top == Maxsize - 1)    //判断是否栈满?满了则入栈失败
    {
        return false;
    }
    S.data[++S.top] == x;    
    return true;
}
bool GetTop(SqStack S, ElemType &m)    //获取栈顶元素。
{
    if (StackEmpty(S))
    {
        return false;    //如果栈为空,则无栈顶元素
    }
    m = S.data[S.top];    //取栈顶元素
    return true;
}
bool Pop(SqStack S, ElemType& m)    //弹出栈顶元素
{
    if (StackEmpty(S))
    {
        return false;    //如果栈为空,则无栈顶元素
    }
    m = S.data[S.top--];    
    return true;
}
int main()
{
    SqStack S;
    InitStack(S);    //初始化栈
    Push(S, 1);        //元素入栈
    Push(S, 2);
    Push(S, 3);
    bool flag;
    flag = StackEmpty(S);
    if (flag == true)
    {
        printf("栈是空的!\n");
    }
    ElemType m;
    flag = GetTop(S, m);
    if (flag == true)
    {
        printf("栈顶元素为:%d\n", m);
    }
    flag = Pop(S, m);
    if (flag)
    {
        printf("弹出的元素为:%d\n", m);
    }
    return 0;
}

运行结果如下:

img

  • 写回答

2条回答 默认 最新

  • 创意程序员 2023-05-07 17:23
    关注

    入栈里面 S.data[++S.top] == x; 多了一个=

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月15日
  • 已采纳回答 5月7日
  • 修改了问题 5月7日
  • 创建了问题 5月7日

悬赏问题

  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥18 c语言期中复习题(求解)
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 求一个十多年前的国产符号计算软件(MMP)+用户手册
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢
  • ¥15 vxworks交叉编译gcc报错error: missing binary operator before token "("
  • ¥15 JSzip压缩文件时如何设置解压缩密码