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

关于顺序栈的出栈问题,为什么输出的结果不对啊?

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 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);
        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);
} 
int StackEmpty(Sqstack &S)  //判断栈是否为空
{
    if (S.top == S.base)
        return 1;
    else
        return 0;
    
}


关于顺序栈的出栈问题,为什么输出的结果不对啊?

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2021-11-17 14:43
    关注
    
    for(i=1;i<=n;i++){
            cout << "输入栈的第" << i << "个元素" << endl;
            ++s.top;//这里你为何要++??
            cin >> newdate.id >> newdate.name;
            Push(s,newdate);
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 stc12c5a60s2、QMC5883L、LCD1602组合测量磁场所需程序
  • ¥15 vba参数转c++ SAFEARRAY
  • ¥20 Win11测试yolov4,“找不到nvcuda.dll”怎么办?
  • ¥15 simulink绘制bode图
  • ¥15 php_network_getaddresses: getaddrinfo failed: Name or service not known
  • ¥15 用msg发消息出现的问题
  • ¥15 unity3d机械臂
  • ¥20 判断两个表是否完全相同
  • ¥20 工控机出现散热器转一下停一下这种情况,是什么原因造成的
  • ¥15 双显卡,启动docker容器报错。