编写一个类实现如下功能
1. 编写程序,其中定义一个int顺序栈类CSeqStack(最多可存放100个元素),其中包含如下公有成员:a)无参构造函数,初始化一个空栈;
b)拷贝构造函数,初始化一个传入栈对象的拷贝;
c)void CSeqStack::push(int x),压栈操作;
d)int CSeqStack::pop(),弹栈操作;
e)int CSeqStack::isEmpty(),判栈空操作,栈中元素为0返回true,否则返回false;
f)int CSeqStack::isFull(),判栈空操作,栈中元素≥100返回true,否则返回false;
g)析构函数;
使用该类实现如下功能:从控制台输入一组正整数(数量不超过100,输入0表示结束),将输入的这些正整数按输入顺序逆序输出,且每行输出5个数(用,分隔)。
本帖最后由 傻眼貓咪 于 2021-12-28 19:09 编辑
我的代码有三点必须注意:
1.)采用头文件和源文件编写,在运行之前,请自行确保路径与设定无误(不要问我为什么系统显示找不到之类的问题)。
2.)我用头文件 <memory> 里面有个成员 make_unique 只能是 C++14 或以上版本才能正常运行,如果你的编译器是老版本,不能运行(不要问我为什么,问 C++ 官方)。
3.)我不晓得为什么楼主明明才做填空白题,突然跳跃这么远,希望楼主已经将基础学稳了,不然看见我的代码什么都问,我会晕{:10_247:},基本上我都已经注解了。
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 = 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;
}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;
} 傻眼貓咪 发表于 2021-12-28 19:03
我的代码有三点必须注意:
1.)采用头文件和源文件编写,在运行之前,请自行确保路径与设定无误(不要问我 ...
谢谢,分享{:5_110:}
关于第三点为什么跳跃,属实一两句话说不完,一言难尽。
本来要发悬赏的,现在等级不够,不能悬赏渔币,再次感谢分享! 学不会绝不改名 发表于 2021-12-28 19:11
谢谢,分享
关于第三点为什么跳跃,属实一两句话说不完,一言难尽。
本来要发悬赏的,现在等 ...
{:5_108:}
页:
[1]