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

悬赏问题

  • ¥20 qt中connect两个signal
  • ¥20 pix2pixHD运行测试命令时出现数据类型错误无法反向传播的问题
  • ¥15 python处理Excel符合条件的行自动填写数据分类
  • ¥15 汇编hook举例并讲解(通俗易懂,学习用)
  • ¥20 用c++语言模拟键盘电子琴设计
  • ¥15 STM32cubemx生成keil工程,有问题与正常的情况不同,求解!
  • ¥15 如何自动点击银行app的安全键盘,实现密码自动输入
  • ¥15 关于四边形重叠的问题
  • ¥15 用verilog语言设计一个简易的八音符电子琴,可通过按键输入来控制音响。演奏时可以选择是手演奏(由键盘输入)或自动演奏已存入的乐曲。能够自动演奏多首乐曲,且每首乐曲可重复演奏
  • ¥15 sap gui脚本每次到导出Excel的时候就停住不动。不会另存为。