和乐i 2020-07-07 15:19 采纳率: 100%
浏览 158
已采纳

求助大佬,C++进行栈操作,是哪里出了问题

代码如下

#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
#define maxsize 100

//定义栈的结构体 
typedef int datatype; 
struct Stack{
    datatype elements[maxsize];
    int Top;
}; 

//对栈初始化
struct Stack *SetNullS(struct Stack *S){
    S->Top=-1;
    return S;
} 

//判断栈是否为空(出栈时)
int EmptyS(struct Stack *S){
    if(S->Top>=0) return 0;
    else return 1;
} 

//进栈,需要判断是否栈满 
struct Stack *PushStackS(struct Stack *S,datatype e){
    if(S->Top>=maxsize-1){  //数组从0开始 
        cout<<"溢出"<<endl;
        return NULL;
    }
    else{
        S->Top++;
        S->elements[S->Top]=e;
    }
    return S;
}

//出栈,需要判断是否栈空,并返回栈顶元素 
 datatype *PopS(struct Stack *S){
    datatype *ret; 
     if(EmptyS(S)){
        cout<<"栈为空"<<endl;
         return NULL; 
     }
    else{
        S->Top--;   //删除栈顶数据元素 
        ret=(datatype *)malloc(sizeof(datatype));
        *ret=S->elements[S->Top+1];
        return ret; 
    }
 }

//取栈顶元素(仅取值)
datatype *GetTopS(struct Stack *S){
    datatype *ret;
    if(EmptyS(S)){
        cout<<"栈是空的"<<endl;
        return NULL;
    } 
    else{
        ret=(datatype *)malloc(sizeof(datatype));
        *ret=S->elements[S->Top];
        return ret; 
    }
} 

int main(){
    struct Stack *S;
    SetNullS(S);    //初始化
    datatype e;
    while((e=getche())!='#')    //入栈 
    {
        PushStackS(S,e);
    }
    cout<<endl;
    datatype *x=GetTopS(S); //取栈顶元素 
    cout<<x<<endl;      
    PopS(S);        //出栈 
    datatype *y=GetTopS(S); //取栈顶元素 
    cout<<y<<endl;
    return 0;   
}

最后输出的应该是数值的,结果输出了地址,为什么?

  • 写回答

1条回答 默认 最新

  • Frank_Liuxing 2020-07-07 15:23
    关注
    int main(){
        struct Stack *S;
        SetNullS(S);    //初始化
    

    这里就已经错了,S没有初始化。
    你是不是应该写成:
    struct Statck s;
    SetNullS(&S);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统