m0_53002692 2022-10-31 23:08 采纳率: 37.5%
浏览 16
已结题

顺序栈代码遭遇问题,无法正常运行

问题遇到的现象和发生背景

顺序栈编写代码遭遇问题。

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 100
typedef struct
{
    int *base;            //鏍堝簳鎸囬拡 
    int *top;              //鏍堥《鎸囬拡 
    int stacksize;        //鏍堝彲鐢ㄧ殑鏈€澶у閲?
}SqStack;



//初始化 
int InitStack(SqStack S);
//顺序栈入栈 
int Push(SqStack S,int e);
//出栈 
int Pop(SqStack S,int e); 
//获得元素 
int GetTop(SqStack S); 


int main()
{
    SqStack S;
    int *e=1;
    InitStack(S);
    
    Push(S,e);
    Push(S,e); 
    printf("%d",e);
    int x = *S.top;
    printf("%d",x);
    printf("%d",x);
    Pop(S,e);
    GetTop(S);
    return 0;
 } 
//初始化 
int InitStack(SqStack S){
//    S->base = (int)malloc(MAXSIZE*sizeof(int));
    int arr[MAXSIZE];
    S.base = arr;
    if(!S.base) return 0;
    S.top = S.base;
    S.stacksize = MAXSIZE;
    return 1;
}
//入栈 
int Push(SqStack S,int e){
    if(S.top-S.base == S.stacksize) return 0;
//    *S.top++ = e;
    *S.top = e;
    S.top++;
    return 1;    
}
//出栈 
int Pop(SqStack S,int e){
    if(S.top == S.base) return 0;
//    e = *--S.top;
    S.top--;
    e = *S.top; 
    return 1;
}
//获得元素 
int GetTop(SqStack S){
    if(S.base != S.top){
        return *(S.top-1);
    }
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

经过调试,发现
*S.top = e;
S.top++;
出现问题

我想要达到的结果

希望能获得解决方案

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-11-01 01:53
    关注

    改动处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 100
    typedef struct
    {
        int *base;            //鏍堝簳鎸囬拡
        int *top;              //鏍堥《鎸囬拡
        int stacksize;        //鏍堝彲鐢ㄧ殑鏈€澶у閲?
    }SqStack;
    //初始化
    int InitStack(SqStack* S); //修改
    //顺序栈入栈
    int Push(SqStack* S,int e);//修改
    //出栈
    int Pop(SqStack* S,int* e); //修改
    //获得元素
    int GetTop(SqStack S);
    int main()
    {
        SqStack S;
        int e=1; //int *e=1; 修改
        InitStack(&S);
        Push(&S,2);  //修改
        Push(&S,3);  //修改
               //printf("%d",e);修改
               //int x = *S.top;
               //printf("%d",x);
               //printf("%d",x);
        Pop(&S, &e);
        printf("%d ",e);
    
        e = GetTop(S);  //修改
        printf("%d ",e);
    
        return 0;
     }
    //初始化
    int InitStack(SqStack* S){
    
        S->base = (int*)malloc(MAXSIZE*sizeof(int));//修改
                                //int arr[MAXSIZE];  修改
                                //S.base = arr;      修改
                                
        if(!S->base)  return 0; //if(!S.base) return 0;修改
        S->top = S->base;       //S.top = S.base;
        S->stacksize = MAXSIZE; //S.stacksize = MAXSIZE;
        return 1;
    }
    //入栈
    int Push(SqStack* S,int e){
    
            //if(S.top-S.base == S.stacksize) return 0;
        if(S->top - S->base == S->stacksize) return 0;
            //*S.top++ = e;
        *S->top = e; //修改
        S->top++;    //修改
        return 1;
    }
    //出栈 
    int Pop(SqStack* S,int* e){
    
             //if(S.top == S.base) return 0; 修改
        if(S->top == S->base) return 0;
             //    e = *--S.top;
        S->top--;    //修改
        *e = *S->top;//修改
        return 1;
    }
    //获得元素 
    int GetTop(SqStack S){
        if(S.base != S.top)
            return *(S.top-1);
        else
            return -999; //修改
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 10月31日

悬赏问题

  • ¥50 深度学习运行代码直接中断
  • ¥15 关于#单片机#的问题,请各位专家解答!
  • ¥15 关于#单片机#的问题,请各位专家解答!
  • ¥20 需要完整的共散射点成像代码
  • ¥15 编写vba代码实现数据录入工作
  • ¥15 做过TCL海信电视小米电视相关影视会员软件私我
  • ¥15 Mapreduce是正常的,在运行其他jar包时并没有任何问题,只是在做LogCount.jar 时出的问题。如图所示
  • ¥15 ImportError: DLL load failed while importing _iterative: 找不到指定的模块。
  • ¥15 如何通过交互分析得出某高危患者对放疗获益更多
  • ¥15 相关性分析中,p<0.05, r=0.29,怎么评价相关性呢