tiaya01 2021-11-17 14:36 采纳率: 83.3%
浏览 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日

悬赏问题

  • ¥50 adb连接不到手机是怎么回事?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目