【问题描述】请根据已给出的部分代码,完善顺序栈类的设计以使程序正确运行。给出的代码部分修改无效。
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;
}
#include<iostream>
using namespace std;
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; //ջ�Ƿ�����
};
Stack::Stack(int size) {
maxSize = size;
top = -1;
elements = new int[maxSize];
}
void Stack::Push(const int& data) {
top += 1;
elements[top] = data;
}
Stack::Stack(const Stack& nm) {
top = nm.top;
maxSize = nm.maxSize;
elements = new int[nm.maxSize];
for (int i = 0; i <= top; i++) {
elements[i] = nm.elements[i];
}
}
bool Stack::IsFull() const {
if (top == maxSize - 1) {
return true;
}
return false;
}
bool Stack::IsEmpty()const {
if (top == -1) {
return true;
}
return false;
}
int Stack::Pop() {
return elements[top--];
}
void Stack::MakeEmpty() {
top = -1;
}
Stack::~Stack() {
delete[]elements;
}
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;
}
第二
【问题描述】
定义一个通讯录的类,数据成员包括姓名、单位、电话号码、邮编,成员函数有分别输出和获得各项数据,分别设置各项数据,同时包括构造函数、析构函数、拷贝构造函数,注意数据成员包含指针成员,应实现深拷贝。
【输入形式】
【输出形式】
#include <iostream>
#include <cstring>
using namespace std;
class COM {
char* pname;
char* punit;
char* pnum;
char box[6];
public:
COM();
COM(const char* name, const char* unit, const char* num, const char* b);
COM(const COM& p);
~COM();
void print();
void setname(const char* name);
void setuint(const char* unit);
void setnum(const char* num);
void setbox(const char* b);
char* getname();
char* getuint();
char* getnum();
char* getbox();
};
COM::COM() {
}
COM::COM(const char* name, const char* unit, const char* num, const char* b) {
this->pname = new char[strlen(name)+1];//建立一个动态数组空间,里面放入name的长度
strcpy(this->pname, name);
this->punit = new char[strlen(unit)+1];
strcpy(this->punit, unit);
this->pnum = new char[strlen(num)+1];
strcpy(this->pnum, num);
strcpy(this->box, b);
}
COM::COM(const COM& p) {//因为当对象被销毁时,析构函数,会将上面建设的动态变量给销毁,所以我们得使用新的动态数组来存储,也就是深拷贝
pname = new char[strlen(p.pname) + 1];
strcpy(pname, p.pname);
punit = new char[strlen(p.punit)+1];
strcpy(punit, p.punit);
pnum = new char[strlen(p.pnum) + 1];//加1是为了给/0流出空间
strcpy(pnum, p.pnum);
strcpy(box, p.box);
}
COM:: ~COM() {
delete[]pname;
delete[]punit;
delete[]pnum;
}
void COM:: setname(const char* name) {
pname = new char[strlen(name) + 1];
strcpy(pname, name);
}
void COM::setuint(const char* unit) {
punit = new char[strlen(unit) + 1];
strcpy(punit, unit);
}
void COM::setnum(const char* num) {
pnum = new char[strlen(num) + 1];
strcpy(pnum,num);
}
void COM::setbox(const char* b) {
strcpy(this->box, b);
}
char* COM:: getname() {
return pname;
}
char* COM::getuint() {
return punit;
}
char* COM::getnum() {
return pnum;
}
char* COM::getbox() {
return box;
}
void COM::print() {
cout << pname << endl;
cout << punit << endl;
cout << pnum << endl;
cout << box << endl;
}
int main()
{
COM c1("wangdahai", "江大", "88664455", "212013"),
c2("张三", "江科技大", "88771111", "212034"), c3(c1), c4;
c3.setname("李四");
c4.setname("王五");
c4.setuint("科大");
c4.setnum("22334455");
c4.setbox("212067");
c1.print();
c2.print();
c3.print();
c4.print();
}