c++作业

发布于:2024-04-06 ⋅ 阅读:(81) ⋅ 点赞:(0)

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

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();
}


网站公告

今日签到

点亮在社区的每一天
去签到