1、自行封装一个栈的类
头文件
#ifndef ZY1_H
#define ZY1_H
#include <iostream>
using namespace std;
class Stack
{
private:
int *p = nullptr; //存储栈的数组
int top; //栈顶元素的下标
int max;
public:
//定义析构函数
~Stack();
//定义拷贝构造函数
Stack(const Stack &other);
//创建栈
Stack(int max);
//判空
bool stack_empty();
//判满
bool stack_full();
//入栈
int stack_push(int e);
//出栈
int stack_pop();
//获取栈顶元素
int stack_top();
//栈的大小
void stack_getsize();
//清空栈
int stack_delete();
};
#endif // ZY1_H
源文件:
#include "zy1.h"
//定义析构函数
Stack::~Stack()
{
delete []p; //释放成员指针的空间
cout<<"Stu::析构函数:"<<this<<endl;
}
//定义拷贝构造函数
Stack::Stack(const Stack &other):p(other.p),top(other.top)
{
cout<<"拷贝构造函数"<<endl;
}
//初始化
Stack::Stack(int size)
{
max = size;
p = new int[max]; //构造函数
top =-1;
}
//判空
bool Stack::stack_empty()
{
if(top==-1)
{
cout<<"栈为空"<<endl;
return 1;
}
return 0;
}
//判满
bool Stack::stack_full()
{
if(top==max-1)
{
cout<<"栈已满"<<endl;
return 1;
}
return 0;
}
//入栈
int Stack::stack_push(int e)
{
if(stack_full())
{
cout<<"入栈失败"<<endl;
return -1;
}
top++;
p[top]=e;
cout<<"入栈成功"<<endl;
return 0;
}
//出栈
int Stack::stack_pop()
{
if(stack_empty())
{
cout<<"出栈失败"<<endl;
return -1;
}
int e=p[top];
top--;
cout<<e<<"出栈成功"<<endl;
return 0;
}
//清空栈
int Stack::stack_delete()
{
while(top!=-1)
{
stack_pop();
}
delete [] p;
p=nullptr;
cout<<"清空成功"<<endl;
return 0;
}
//获取栈顶元素
int Stack::stack_top()
{
cout<<"栈顶元素是:"<<p[top]<<endl;
return 0;
}
//求栈的大小
void Stack::stack_getsize()
{
cout<<"栈的大小为:"<<top+1<<endl;
}
测试文件:
#include "zy1.h"
int main()
{
//设置栈存储的最大值max
int m;
cout<<"设置栈的大小"<<endl;
cin>>m;
Stack s1(m);
int e;
int n;
//判空
s1.stack_empty();
//入栈
cout<<"请输入要入栈的个数:";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"请输入要入栈的元素:";
cin>>e;
s1.stack_push(e);
}
s1.stack_top();
s1.stack_getsize();
cout<<endl;
s1.stack_delete();
return 0;
}
2、自行封装一个队列的类
#ifndef ZY2_H
#define ZY2_H
#include <iostream>
#define MAX 128
using namespace std;
class Queue
{
private:
int *p; //队列的数组
int tail; //记录队尾元素
int head; //记录对头元素
int max; //队列元素的最大数量
public:
//析构函数
~Queue();
//拷贝构造函数
Queue(const Queue &other);
//初始化
Queue(int size);
//判空
bool queue_empty();
//判满
bool queue_full();
//入队
int queue_push(int e);
//出队
int queue_pop();
//清空队列
int queue_delete();
//队列的大小
void queue_getsize();
};
#endif // ZY2_H
源文件:
#include "zy2.h"
//初始化
Queue::Queue(int size)
{
max = size;
p = new int[max]; //构造函数
head = -1;
tail = -1;
}
//定义析构函数
Queue::~Queue()
{
delete []p; //释放成员指针的空间
cout<<"Stu::析构函数:"<<this<<endl;
}
//拷贝构造函数
Queue::Queue(const Queue &other):p(other.p),tail(other.tail),head(other.head)
{
cout<<"拷贝构造函数"<<endl;
}
//判空
bool Queue::queue_empty()
{
if(head==tail)
{
cout<<"队列为空"<<endl;
return 1;
}
return 0;
}
//判满
bool Queue::queue_full()
{
if((tail+1)==0)
{
cout<<"队列已满"<<endl;
return 1;
}
return 0;
}
//入队
int Queue::queue_push(int e)
{
if(queue_full())
{
cout<<"入队失败"<<endl;
return -1;
}
p[tail]=e;
tail++;
cout<<"入队成功"<<endl;
return 0;
}
//出队
int Queue::queue_pop()
{
if(queue_empty())
{
cout<<"出队失败"<<endl;
return -1;
}
int e=p[head];
head=(head+1)%MAX;
cout<<e<<"出队成功"<<endl;
return 0;
}
//队列的大小
void Queue::queue_getsize()
{
int size;
size=(tail-head+MAX)%MAX;
cout<<"队的大小为:"<<size<<endl;
}
//清空队列
int Queue::queue_delete()
{
while(head!=tail)
{
queue_pop();
}
delete [] p;
p=nullptr;
cout<<"清空队列成功"<<endl;
return 0;
}
测试文件:
#include "zy2.h"
int main()
{
//设置队列存储的最大值max
int m;
cout<<"设置队列的大小"<<endl;
cin>>m;
Queue q1(m);
int e;
int n;
q1.queue_empty();
cout<<"请输入要入队的个数:";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"请输入要入队的元素:";
cin>>e;
q1.queue_push(e);
}
q1.queue_getsize();
cout<<endl;
q1.queue_delete();
return 0;
}
3、思维导图