tiaya01 2021-11-17 14:36 采纳率: 85.7%
浏览 28
已结题

顺序栈的输出,请问输出这里有什么问题啊?为什么输出的结果都是一样的?

img

这里是代码:


#include<iostream>
using namespace std;

#define MAXSIZE 100
typedef struct{
    int id;
    char name[10];
}SElemtype;

typedef struct{
    SElemtype *base;
    SElemtype *top;
    int stacksize;
}Sqstack;

void InitStack(Sqstack &S);
void Push(Sqstack &S,SElemtype e);
void Pop(Sqstack &S,SElemtype &e);
SElemtype Gettop(Sqstack S);

int main(){
    Sqstack s;
    SElemtype newdate;
    cout << "构造一个空栈" << endl;
    InitStack(s);
    int i,n;
    cout << "请输入栈的长度:" << endl;
    cin >> n;
    for(i=1;i<=n;i++){
        cout << "输入栈的第" << i << "个元素" << endl;
        ++s.top;
        cin >> newdate.id >> newdate.name;
        Push(s,newdate);
    }    
    cout << "请输出栈顶元素:"<< endl;    
    Gettop(s);
    cout << newdate.id << " " << newdate.name << endl;
    cout << "请输出元素:" << endl;
    for(int i=1;i <= s.top-s.base;i++){
        cout << newdate.id << " " << newdate.name << endl;
    }    
    return 0;
}
//顺序栈的初始化 
void InitStack(Sqstack &S){
    S.base=new SElemtype[MAXSIZE];//为顺序栈的动态分配数组空间 
    if(!S.base)//存储分配失败 
    exit(1);
    S.top=S.base;//top初始为base,空栈 
    S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE 
}
//顺序栈的入栈
void Push(Sqstack &S,SElemtype e){
    if(S.top-S.base==S.stacksize)//栈满 
    exit(1);
    *S.top++=e;
} 
//顺序栈的出栈 
void Pop(Sqstack &S,SElemtype &e){    
    
    if(S.top==S.base)//栈空 
    exit(1);
    e=*--S.top;//栈顶指针减1,将栈顶元素赋值给e 
}
//顺序栈获取栈顶元素
SElemtype Gettop(Sqstack S){
    if(S.top != S.base)
    return *(S.top-1);
} 

顺序栈的输出,请问输出这里有什么问题啊?为什么输出的结果都是一样的?

  • 写回答

3条回答 默认 最新

  • 接着奏乐吧 2021-11-17 15:17
    关注
     
    #include<iostream>
    using namespace std;
    #define MAXSIZE 100
    typedef struct{
        int id;
        char name[10];
    }SElemtype;
    typedef struct{
        SElemtype *base;
        SElemtype *top;
        int stacksize;
    }Sqstack;
    void InitStack(Sqstack &S);
    void Push(Sqstack &S,SElemtype e);
    void Pop(Sqstack &S,SElemtype &e);
    SElemtype Gettop(Sqstack S);
    int StackEmpty(Sqstack &S);
     
    int main(){
        Sqstack s;
        SElemtype newdate;
        cout << "构造一个空栈" << endl;
        InitStack(s);
        int i,n;
        cout << "请输入栈的长度:" << endl;
        cin >> n;
        for(i=1;i<=n;i++){
            cout << "输入栈的第" << i << "个元素" << endl;
          //  ++s.top;
            cin >> newdate.id >> newdate.name;
            Push(s,newdate);
        }    
        cout << "请输出栈顶元素:"<< endl;    
        Gettop(s);
        cout << newdate.id << " " << newdate.name << endl;
        cout << "请输出元素:" << endl;
        while (!StackEmpty(s))
        {
            Pop(s, newdate);
              
        }
        return 0;
    }
    //顺序栈的初始化 
    void InitStack(Sqstack &S){
        S.base=new SElemtype[MAXSIZE];//为顺序栈的动态分配数组空间 
        if(!S.base)//存储分配失败 
        exit(1);
        S.top=S.base;//top初始为base,空栈 
        S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE 
    }
    //顺序栈的入栈
    void Push(Sqstack &S,SElemtype e){
        if(S.top-S.base==S.stacksize)//栈满 
        exit(1);
        *S.top++=e;
    } 
    //顺序栈的出栈 
    void Pop(Sqstack &S,SElemtype &e){    
        if(S.top==S.base)//栈空 
        exit(1);
         
    
        e=*(--S.top);//栈顶指针减1,将栈顶元素赋值给e 
        cout << e.id << " " << e.name << endl; 
    }
    //顺序栈获取栈顶元素
    SElemtype Gettop(Sqstack S){
        if(S.top != S.base)
        return *(S.top-1);
    } 
    int StackEmpty(Sqstack &S)  //判断栈是否为空
    {
        if (S.top == S.base)
            return 1;
        else
            return 0;
    }
     
    
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 11月17日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法