C++封装一个循环顺序队列,并封装其相应的操作:判空、判满、入队列、出队、遍历队、求队列长度、销毁
目录
头文件
#ifndef HEADER_H
#define HEADER_H
using namespace std;
#define MAX 7
typedef int datatype;
class Queue{
private:
datatype *data;
int front;
int tail;
public:
//申请队列空间,并初始化
void init();
//判空
bool queue_empty();
//判满
bool queue_full();
//入队列
void queue_push(datatype num);
//出队列
void queue_pop();
//遍历队列
void queue_show();
//求队列长度
int queue_size();
//销毁
void queue_delete();
};
#endif // HEADER_H
源文件
#include <iostream>
#include <header.h>
//申请队列空间,并初始化
void Queue::init()
{
data=new int[MAX];
front=0;
tail=0;
cout <<"创建成功" <<endl;
}
//判空
bool Queue::queue_empty()
{
return front==tail;
}
//判满
bool Queue::queue_full()
{
return (tail+1)%MAX == front;
}
//入队列
void Queue::queue_push(datatype num)
{
if(queue_full())
{
cout <<"队列已经满了,入队失败" <<endl;
}
//把数据放在队尾位置
data[tail]=num;
//队尾后移
tail=(tail+1)%MAX;
cout << "入队成功"<<endl;
}
//出队列
void Queue::queue_pop()
{
if(queue_empty())
{
cout <<"队列已经空,出队失败" <<endl;
}
//从队头出队
//队头后移
front=(front+1)%MAX;
cout << "出队成功"<<endl;
}
//遍历队列
void Queue::queue_show()
{
//判断逻辑
if(queue_empty())
{
cout << "遍历失败"<<endl;
return;
}
//遍历逻辑
cout <<"队伍中从对头到队尾元素分别是:";
for(int i=front; i!=tail; i=(i+1)%MAX)
{
cout << data[i];
}
cout <<"\n";
}
//求队列长度
int Queue::queue_size()
{
cout <<"队列长度为 ";
return (tail+MAX-front)%MAX;
}
//销毁
void Queue::queue_delete()
{
front=tail=0;
delete []data;
data=nullptr;
cout<<"销毁队列成功"<<endl;
}
测试文件
#include <iostream>
#include <header.h>
int main()
{
//创建类变量
Queue queue;
//申请队列空间,并初始化
queue.init();
//入队列
queue.queue_push(2);
queue.queue_push(5);
queue.queue_push(8);
queue.queue_push(7);
queue.queue_push(2);
queue.queue_push(4);
//遍历队列
queue.queue_show();
//出队列
queue.queue_pop();
//遍历队列
queue.queue_show();
//求队列长度
cout <<queue.queue_size()<< endl;
//销毁
queue.queue_delete();
//遍历队列
queue.queue_show();
return 0;
}