本帖最后由 傻眼貓咪 于 2021-12-28 19:09 编辑
我的代码有三点必须注意:
1.)采用头文件和源文件编写,在运行之前,请自行确保路径与设定无误(不要问我为什么系统显示找不到之类的问题)。
2.)我用头文件 <memory> 里面有个成员 make_unique 只能是 C++14 或以上版本才能正常运行,如果你的编译器是老版本,不能运行(不要问我为什么,问 C++ 官方)。
3.)我不晓得为什么楼主明明才做填空白题,突然跳跃这么远,希望楼主已经将基础学稳了,不然看见我的代码什么都问,我会晕

,基本上我都已经注解了。
CSeqStack.h
- /* 头文件 */
- #include <memory>
- using namespace std;
- class CSeqStack
- {
- /* 私有成员 */
- unique_ptr<int[]>stackArray; // C++11
- int capacity;
- int top;
-
- public:
-
- CSeqStack(int capacity); // 构造函数
- ~CSeqStack(); // 析构函数
-
- /* 公共成员 */
- void push(int value);
- void pop (int &value);
- bool isEmpty() const;
- bool isFull() const;
-
- /* 堆栈异常 */
- class Overflow {};
- class Underflow {};
- };
复制代码 CSeqStack.cpp- /* 源文件 */
- #include "CSeqStack.h"
- CSeqStack::CSeqStack(int capacity){
- stackArray = make_unique<int[]>(capacity); // C++14
- this->capacity = capacity;
- top = 0;
- }
- /* (g)析构函数 */
- CSeqStack::~CSeqStack(){}
- void CSeqStack::push(int value){
- if (top == capacity)
- throw CSeqStack::Overflow();
- stackArray[top] = value;
- top++;
- }
- bool CSeqStack::isEmpty() const{ return top == 0; }
- bool CSeqStack::isFull() const{ return top >= capacity; }
- void CSeqStack::pop(int &value){
- if (isEmpty()) throw CSeqStack::Underflow();
- top--;
- value = stackArray[top];
- }
复制代码 main.cpp- /* 这是主文件 */
- #include "CSeqStack.h"
- #include <iostream>
- using namespace std;
- int main()
- {
- /* (a)无参构造函数,初始化一个空栈,最多可存放100个元素*/
- CSeqStack stack(100);
-
- /* (b)拷贝构造函数,初始化一个传入栈对象的拷贝 */
- CSeqStack *p = &stack;
-
- int value, num;
-
- /* (c)压栈操作 */
- cout << "压栈操作...\n";
- while(scanf("%d", &num)){
- if(!num) break;
- p->push(num);
- cout << num << " ";
- }
-
- /* (d)弹栈操作 */
- cout << "\n弹栈操作...\n";
- while (!p->isEmpty()){
- p->pop(value);
- cout << value << " ";
- }
-
- /* (e)判栈空操作,栈中元素为 0 返回 true,否则返回 false; */
- cout << endl << "栈是否空?:" << (bool)p->isEmpty()<< endl;
-
- /* (f)判栈空操作,栈中元素 ≥100 返回 true,否则返回 false; */
- cout << "栈是否满?:" << (bool)p->isFull()<< endl;
-
- cout << endl;
- return 0;
- }
复制代码