克己ovo 2021-09-16 23:18 采纳率: 90%
浏览 62
已结题

顺序栈的出入栈操作 为啥异常退出


//顺序栈的基本操作
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
#define ElemType int 

//定义栈的存储类型 
typedef struct Nodestack Sqstack;
struct Nodestack{
    ElemType data[MaxSize];//利用数组存储数据
    int Top; //栈顶指针 
}; 


//初始化栈
void InitStack(Sqstack s){
    s.Top==-1;
    printf("初始化完成\n");
}
//判断是否是空栈
bool Sqstackempty (Sqstack s){
    if(s.Top==-1)
        return true;
    return false;
} 
//进栈操作 
bool Push(Sqstack s,ElemType x ){
    if(s.Top==MaxSize-1){
        printf("栈满了 无法入栈\n");
        return false;
    }
    s.data[++s.Top] = x;
    printf("入栈成功\n");
    return true;
}
//出栈操作
bool Pop(Sqstack s,ElemType x){
    if(s.Top==-1){
        printf("栈空\n");
        return false;
    } 
    x=s.data[s.Top--];
    printf("将%d弹出栈",x);
    return true;
} 

//读取栈顶元素
bool GetTop(Sqstack s,ElemType x){
    if(s.Top==-1){
        printf("栈空\n");
        return false;
    }
    x=s.data[s.Top];
    return true;
}
int main(){
    int x;
    //int flag1,flag2;
    Sqstack S;
    InitStack(S);
    int n;ElemType e;int flag;
    printf("请输入入栈元素个数(>=1):\n");
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
     printf("请输入第%d个元素的值:",i+1);
     scanf("%d",&e);
     flag=Push(S,e);
     if(flag)printf("%d已入栈\n",e);
     else {printf("栈已满!!!\n");break;}
    }
    int a;ElemType E;int flag1;
    printf("请输入出栈元素个数(>=1):\n");
    scanf("%d",&a);
    for(int i=0;i<n;i++)
    {
     flag1=Pop(S,E);
     if(flag1)printf("%d已出栈\n",E);
     else {printf("栈已空!!!\n");break;}
    }
}



 

入栈 2个的时候 第二个异常退出

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-09-17 08:59
    关注

    修改两处错误,见注释:

    //顺序栈的基本操作
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define MaxSize 10
    #define ElemType int 
    //定义栈的存储类型 
    typedef struct Nodestack Sqstack;
    struct Nodestack {
        ElemType data[MaxSize]; //利用数组存储数据
        int Top; //栈顶指针 
    };
    
    //初始化栈
    void InitStack(Sqstack& s) {
        s.Top = -1;                //s.Top == -1;
        printf("初始化完成\n");
    }
    //判断是否是空栈
    bool Sqstackempty(Sqstack& s) {
        if (s.Top == -1)
            return true;
        return false;
    }
    //进栈操作 
    bool Push(Sqstack& s, ElemType& x) {
        if (s.Top == MaxSize - 1) {
            printf("栈满了 无法入栈\n");
            return false;
        }
        s.data[++s.Top] = x;
        printf("入栈成功\n");
        return true;
    }
    //出栈操作
    bool Pop(Sqstack& s, ElemType& x) {
        if (s.Top == -1) {
            printf("栈空\n");
            return false;
        }
        x = s.data[s.Top--];
        printf("将%d弹出栈", x);
        return true;
    }
    //读取栈顶元素
    bool GetTop(Sqstack s, ElemType x) {
        if (s.Top == -1) {
            printf("栈空\n");
            return false;
        }
        x = s.data[s.Top];
        return true;
    }
    int main() {
        //int x;
        //int flag1,flag2;
        Sqstack S;
        InitStack(S);
        int n; 
        ElemType e; 
        int flag;
        printf("请输入入栈元素个数(>=1):\n");
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        {
            printf("请输入第%d个元素的值:", i + 1);
            scanf("%d", &e);
            flag = Push(S, e);
            if (flag)printf("%d已入栈\n", e);
            else { printf("栈已满!!!\n"); break; }
        }
        int a; ElemType E; int flag1;
        printf("请输入出栈元素个数(>=1):\n");
        scanf("%d", &a);
        for (int i = 0; i < a; i++)//for (int i = 0; i < n; i++)
        {
            flag1 = Pop(S, E);
            if (flag1)printf("%d已出栈\n", E);
            else { printf("栈已空!!!\n"); break; }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月26日
  • 已采纳回答 9月18日
  • 修改了问题 9月16日
  • 创建了问题 9月16日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog