英豪比利 2023-03-12 12:22 采纳率: 60%
浏览 25
已结题

关于#顺序栈#的问题,如何解决?

//【问题描述】请根据已给出的部分代码,完善顺序栈类的设计以使程序正确运行。给出的代码部分修改无效。

class Stack

{

int top;//栈顶位置(下标)

int* elements; //动态建立的栈

int maxSize;         //栈最大容纳的元素个数

public:

Stack(int=20);       //形参为栈能够容纳的元素个数

~Stack();

Stack(const Stack&);

void Push(const int& data);                    //将data压栈

int Pop();                            //弹出栈顶元素

void MakeEmpty();                  //清空栈,数据重新从0下标存放

bool IsEmpty() const;          //栈是否为空

bool IsFull() const;     //栈是否已满

};

int main()

{

int num,data;

cin>>num;//栈中欲存储的元素个数

Stack stack1(num);

for(int i=0; i<num; i++)

{

cin>>data;

stack1.Push(data);

}

Stack stack2(stack1);

if(stack2.IsFull()) cout<<"Stack Full"<<endl;

while(!stack2.IsEmpty())//栈非空

cout<<stack2.Pop()<<' ';

cout<<endl;

stack1.MakeEmpty();

cout<<stack1.IsEmpty()<<endl;

return 0;

}
  • 写回答

3条回答 默认 最新

  • 社区专家-Monster-XH 2023-03-12 12:54
    关注
    
    #include <iostream>
    using namespace std;
    
    class Stack
    {
        int top;           // 栈顶位置(下标)
        int* elements;     // 动态建立的栈
        int maxSize;       // 栈最大容纳的元素个数
    public:
        Stack(int size = 20);
        Stack(const Stack& other);
        ~Stack();
        void Push(const int& data);  // 将data压栈
        int Pop();                   // 弹出栈顶元素
        void MakeEmpty();            // 清空栈,数据重新从0下标存放
        bool IsEmpty() const;        // 栈是否为空
        bool IsFull() const;         // 栈是否已满
    };
    
    Stack::Stack(int size)
    {
        maxSize = size;
        elements = new int[size];
        top = -1;
    }
    
    Stack::Stack(const Stack& other)
    {
        maxSize = other.maxSize;
        top = other.top;
        elements = new int[maxSize];
        for (int i = 0; i <= top; i++)
        {
            elements[i] = other.elements[i];
        }
    }
    
    Stack::~Stack()
    {
        delete[] elements;
    }
    
    void Stack::Push(const int& data)
    {
        if (IsFull())
        {
            cout << "Stack Full" << endl;
            return;
        }
        elements[++top] = data;
    }
    
    int Stack::Pop()
    {
        if (IsEmpty())
        {
            cout << "Stack Empty" << endl;
            return -1;
        }
        return elements[top--];
    }
    
    void Stack::MakeEmpty()
    {
        top = -1;
    }
    
    bool Stack::IsEmpty() const
    {
        return top == -1;
    }
    
    bool Stack::IsFull() const
    {
        return top == maxSize - 1;
    }
    
    int main()
    {
        int num, data;
        cin >> num;  // 栈中欲存储的元素个数
        Stack stack1(num);
        for (int i = 0; i < num; i++)
        {
            cin >> data;
            stack1.Push(data);
        }
        Stack stack2(stack1);
        if (stack2.IsFull())
        {
            cout << "Stack Full" << endl;
        }
        while (!stack2.IsEmpty()) // 栈非空
        {
            cout << stack2.Pop() << ' ';
        }
        cout << endl;
        stack1.MakeEmpty();
        cout << stack1.IsEmpty() << endl;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥15 抖音看过的视频,缓存在哪个文件