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

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

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

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 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测