1> 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量
成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小
头文件:
#ifndef Z_H
#define Z_H
#include <iostream>
using namespace std;
class Zhan
{
private:
int *zhan;//存放栈中的数据
int N;//栈空间
int top;//栈顶
public:
//构造函数设置空间为10
Zhan();
//析构函数
~Zhan();
//清空栈
void clear();
//是否栈空
int empty();
//是否栈满
int full();
//获取栈顶元素
void top_data();
//进栈
void into();
//出栈
int out();
//栈的大小
void len();
void show();
};
void choose();
#endif // Z_H
功能函数文件:
#include"z.h"
Zhan::Zhan()
{
N=10;
zhan=new int[N];//分配栈空间
this->top=-1;//初始化栈顶
}
//析构函数
Zhan::~Zhan()
{
delete zhan;
}
//清空栈
void Zhan::clear()
{
this->top=-1;
cout<<"清空成功"<<endl;
}
//是否栈空
int Zhan::empty()
{
return (this->top==-1)?1:0;
}
//是否栈满
int Zhan::full()
{
return (this->top==N-1)?1:0;
}
//获取栈顶元素
void Zhan::top_data()
{
if(empty())
return;
else
{
int a=0;
a=this->top;
cout<<"栈顶元素为:"<<zhan[a--]<<endl;
}
}
//进栈
void Zhan::into()
{
if(full())
return;
else
{
int x;
cout<<"请输入入栈元素:";
cin>>x;
while(getchar()!=10);
zhan[++(this->top)]=x;
cout<<x<<"入栈成功"<<endl;
}
}
//出栈
int Zhan::out()
{
if(empty())
return 0;
else
return zhan[(this->top)--];
}
//栈的大小
void Zhan::len()
{
int a=top;
a+=1;
cout<<"现在栈的大小为:"<<a<<endl;
}
void Zhan::show()
{
cout<<"现在栈元素为:";
int a=this->top;
for(int i=0;i<=a;i++)
{
cout<<zhan[i]<<" ";
}
cout<<endl;
}
//选择功能函数
void choose()
{
int i=0;
Zhan z;
while(1)
{
system("CLS");
z.show();
cout<<"******1.入栈***********"<<endl;
cout<<"******2.出栈***********"<<endl;
cout<<"******3.清空栈*********"<<endl;
cout<<"******4.栈顶元素********"<<endl;
cout<<"******5.栈的大小********"<<endl;
cout<<"******6.退出********"<<endl;
cout<<"请选择功能:";
cin>>i;
while(getchar()!=10);
switch(i)
{
case 1:
z.into();
break;
case 2:
z.out();
break;
case 3:
z.clear();
break;
case 4:
z.top_data();
break;
case 5:
z.len();
break;
case 6:
return;
break;
default:
cout<<"输入错误,请重新输入"<<endl;
break;
}
cout<<"请输入任意字符重新选择:";
getchar();
}
}
测试文件:
#include"z.h"
int main()
{
choose();
return 0;
}
2> 自行封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置
成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小
头文件:
#ifndef DL_H
#define DL_H
#include <iostream>
using namespace std;
class Duilie
{
private:
int *duilie;//存放栈中的数据
int N;//队列空间
int top;//队列头
int tail;//队列尾
public:
//构造函数设置空间为10
Duilie();
//析构函数
~Duilie();
//清空队列
void clear();
//是否队列空
int empty();
//是否队列满
int full();
//进队列
void into();
//出队列
int out();
//队列的大小
void len();
void show();
};
void choose();
#endif // DL_H
功能函数文件:
#include"dl.h"
Duilie::Duilie()
{
N=10;
duilie=new int[N];//分配队列空间
this->top=0;//初始化队列头尾
this->tail=0;
}
//析构函数
Duilie::~Duilie()
{
delete duilie;
}
//清空队列
void Duilie::clear()
{
for(int i=this->top;i!=this->tail;i=(i+1)%N)
{
duilie[i]=0;
}
this->tail=this->top=0;
cout<<"清空成功"<<endl;
}
//是否队列空
int Duilie::empty()
{
return (this->top==this->tail)?1:0;
}
//是否队列满
int Duilie::full()
{
int a=this->tail;
return ((a+1)%N==this->top)?1:0;
}
//进队列
void Duilie::into()
{
if(full())
return;
else
{
int x;
int a=this->tail;
cout<<"请输入入队列的元素:";
cin>>x;
while(getchar()!=10);
duilie[a]=x;
this->tail=(this->tail+1)%N;
cout<<x<<"入队列成功"<<endl;
}
}
//出队列
int Duilie::out()
{
if(empty())
return 0;
else
{
cout<<duilie[this->top]<<"出队列成功"<<endl;
this->top=(this->top+1)%N;
return 1;
}
}
//队列的大小
void Duilie::len()
{
int a=0;
a=(this->tail+N-this->top)%N;
cout<<"现在队列的大小为:"<<a<<endl;
}
void Duilie::show()
{
int a=this->top,b=this->tail;
cout<<"现在队列从头到尾元素为:";
for(int i=a;i!=b;i=(i+1)%N)
{
cout<<duilie[i]<<" ";
}
cout<<endl;
}
//选择功能函数
void choose()
{
int i=0;
Duilie d;
while(1)
{
system("CLS");
d.show();
cout<<"******1.入队列***********"<<endl;
cout<<"******2.出队列***********"<<endl;
cout<<"******3.清空队列*********"<<endl;
cout<<"******4.队列的大小********"<<endl;
cout<<"******5.退出********"<<endl;
cout<<"请选择功能:";
cin>>i;
while(getchar()!=10);
switch(i)
{
case 1:
d.into();
break;
case 2:
d.out();
break;
case 3:
d.clear();
break;
case 4:
d.len();
break;
case 5:
return;
break;
default:
cout<<"输入错误,请重新输入"<<endl;
break;
}
cout<<"请输入任意字符重新选择:";
getchar();
}
}
测试文件:
#include"dl.h"
int main()
{
choose();
return 0;
}
3>思维导图: