MchengY 2022-06-04 16:06 采纳率: 90.5%
浏览 50
已结题

顺序栈的出栈问题,总是无法完全输出

顺序栈中,我想借用出栈来输出栈中的所有内容,但是总是不能输完全
//栈的存储结构
//顺序栈
#include<iostream>
using namespace std;

typedef struct node{
    int data[100];
    int top;//栈顶指针  
}SqStack;

//栈的初始化
void InitStack(SqStack &s){
    s.top=-1;
} 

//出栈
bool PopStack(SqStack &s,int &x){
    if(s.top==-1){
        return false;
    }
    x=s.data[s.top];
    s.top--;
    return true;    
} 

//入栈
bool PushStack(SqStack &s){
    int num,i;
    cout<<"请输入你要入栈的个数:";
    cin>>num;
    for(i=0;i<num;i++){
        if(s.top==99){
            return false;
        }
        
        cin>>s.data[++s.top];
    }
    return true;
} 

//判空
void isEmpty(SqStack &s){
    if(s.top==-1){
        cout<<"栈为空!"<<endl;
    }else{
        cout<<"栈不空。"<<endl;
    }
} 

//判满
void isFull(SqStack &s){
    if(s.top==99){
        cout<<"栈满"<<endl;
    }else{
        cout<<"栈未满"<<endl;
    }
} 

//取栈顶元素
void GetTop(SqStack &s){
    if(s.top==-1){
        return;
    }
    cout<<s.data[s.top]<<endl;    
} 

//取栈长
int GetLength(SqStack &s){
    return (s.top+1);
} 

int main(){
    int x,i;
    SqStack s;
    InitStack(s);
    PushStack(s);
    cout<<"\n栈顶元素:";
    GetTop(s);
    cout<<"\n栈的长度:";
    cout<<GetLength(s);
    cout<<"\n出栈:";
    
    for(i=0;i<GetLength(s);i++){
        PopStack(s,x);
        cout<<x<<"    ";
    }
    /*
    PopStack(s,x);
        cout<<x;
        PopStack(s,x);
        cout<<x;
        PopStack(s,x);
        cout<<x;
    */    
        
    cout<<endl;
    cout<<"判空:";
    isEmpty(s);
    
    
    return 0;
} 

运行结果及报错内容

img

我的解答思路和尝试过的方法

使用了while和for循环

我想要达到的结果
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-06-04 16:42
    关注

    代码没什么问题,主函数里做了修改,出栈循环的逻辑有误,修改如下,供参考:

    //栈的存储结构
    //顺序栈
    #include<iostream>
    using namespace std;
    
    typedef struct node{
        int data[100];
        int top;//栈顶指针
    }SqStack;
    
    //栈的初始化
    void InitStack(SqStack &s){
        s.top=-1;
    }
    
    //出栈
    bool PopStack(SqStack &s,int &x){
        if(s.top == -1){
            return false;
        }
        x=s.data[s.top];
        s.top--;
        return true;
    }
    
    //入栈
    bool PushStack(SqStack &s){
        int num,i;
        cout<<"请输入你要入栈的个数:";
        cin>>num;
        for(i=0;i<num;i++){
            if(s.top==99){
                return false;
            }
            
            cin>>s.data[++s.top];
        }
        return true;
    } 
     
    //判空
    void isEmpty(SqStack &s){
        if(s.top==-1){
            cout<<"栈为空!"<<endl;
        }else{
            cout<<"栈不空。"<<endl;
        }
    } 
     
    //判满
    void isFull(SqStack &s){
        if(s.top==99){
            cout<<"栈满"<<endl;
        }else{
            cout<<"栈未满"<<endl;
        }
    } 
     
    //取栈顶元素
    void GetTop(SqStack &s){
        if(s.top==-1){
            return;
        }
        cout<<s.data[s.top]<<endl;
    } 
     
    //取栈长
    int GetLength(SqStack &s){
        return (s.top+1);
    } 
     
    int main(){
        int x,i;
        SqStack s;
        InitStack(s);
        PushStack(s);
        cout<<"\n栈顶元素:";
        GetTop(s);
        cout<<"\n栈的长度:";
        cout<<GetLength(s);
        cout<<"\n出栈:";
        
        for(i=0;PopStack(s,x);i++){//for(i=0;i<GetLength(s);i++){ 修改
            //PopStack(s,x);  修改
            cout<<x<<"    ";
        }
        /*
        PopStack(s,x);
            cout<<x;
            PopStack(s,x);
            cout<<x;
            PopStack(s,x);
            cout<<x;
        */    
            
        cout<<endl;
        cout<<"判空:";
        isEmpty(s);
        return 0;
    } 
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 创建了问题 6月4日

悬赏问题

  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)
  • ¥30 notepad++ 自定义代码补全提示
  • ¥15 MATLAB有限差分法解一维边值问题
  • ¥200 内网渗透测试 横向渗透 Windows漏洞 Windows权限维持
  • ¥15 数据结构图的相关代码实现