英豪比利 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日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理