0
点赞
收藏
分享

微信扫一扫

数据结构——循环队列

浮游图灵 2022-01-26 阅读 45

4.2.循环队列功能实现

循环队列特点

0.循环队列类的定义实现

//队列的顺序存储 
#include<iostream>
using namespace std;
typedef int Elemtype;
#define MAX_SIZE 25

class queue{
private:
	int head;
	int rear;
	Elemtype *data;
	int size;
	int cnt;//计数	
public:
	//1.队列的无参构造函数 
	queue();
	//2.队列的有参构造函数 
	queue(int s);
	//3.队列的析构函数 
	~queue();
	//4.入队操作 
	void push(Elemtype t);
	//5.出队操作
	bool pop(Elemtype&k);
	//6.判断队列是否为空 
 	bool isEmpty(); 
 	//7.判断队列是否满了
	bool isFull(); 
	//8.返回队尾元素
	Elemtype GetRear();
	//9.返回队头元素
	Elemtype GetHead();
	//10.清空队列
	void Clear();
	//11.打印队列
	void PrintQueue();
};

1.循环队列的无参构造函数

//1.队列的无参构造函数 
queue::queue()
{
	cnt=0; 
	head=0;
	rear=-1;
	size=MAX_SIZE;
	data=new Elemtype[size]; 
}

2.循环队列的有参构造函数

//2.队列的有参构造函数
queue::queue(int s)
{
	head=0;
	rear=-1;
	cnt=0;
	if(size>MAX_SIZE)
	{
		size=MAX_SIZE;
		data=new Elemtype[size];
	}
	else
	{
		size=s;
		data=new Elemtype[size];
	}
		
}

3.循环队列的析构函数

//3.队列的析构函数
queue::~queue()
{
	delete []data;
 } 

4.循环队列入队操作

 //4.入队操作 
void queue::push(Elemtype t)
{
	if(!isFull())
	{
		rear=(rear+1)%size;
		data[rear]=t;
		cnt++;
	}
	else
	{
		cout<<"队列已满"<<endl; 
		return ;
	}
}

5.循环队列出队操作

//5.出队操作
bool queue::pop(Elemtype&k)
{
	if(!isEmpty())
	{
		k=data[head];
		head=(head+1)%size;	
		cnt--;
		return true;
	}
	else
	return false;
 } 

6.循环队列判断队列是否为空

 //6.判断队列是否为空 
 bool queue::isEmpty()
{
	return cnt==0;
}

7.循环队列判断队列是否满了

//7.判断队列是否满了
bool queue::isFull()
{
	return cnt==MAX_SIZE;
}

8.循环队列返回队尾元素

 //8.返回队尾元素
Elemtype queue::GetRear()
{
	if(!isEmpty())
	{
		return data[rear];
	}
	return 0;
}

9.循环队列返回队头元素

//9.返回队头元素
Elemtype queue::GetHead()
{
	if(!isEmpty())
	{
		return data[head];
	}
	return 0;
}

10.循环队列清空队列

//10.清空队列
void queue::Clear()
{
	head=-1;
	rear=-1;
	cnt=0;
 } 

11.循环队列打印队列

//11.打印队列
void queue::PrintQueue()
{
	if(!isEmpty())
	{
		int p=head;
		int q=rear;
		while(p%size!=q)
		{
			cout<<data[p]<<" ";
			p=(p+1)%size;
		}
		cout<<endl;
	}
 } 

12.循环队列测试案例

//12.测试案例
void test01()
{
	int k;
	queue Queue;
	Queue.push(56);
	Queue.push(59);
	Queue.push(98);
	Queue.push(15);
	Queue.push(46);
	Queue.push(78);
	cout<<"队头元素为:"<<Queue.GetHead()<<endl;
	cout<<"队尾元素为:"<<Queue.GetRear()<<endl;
	cout<<"打印队列元素:"; 
	Queue.PrintQueue();
	Queue.pop(k);
	cout<<"弹出元素:"<<k<<endl;
	cout<<"打印队列元素:"; 
	Queue.PrintQueue();
 } 

5.循环队列总源码

//队列的顺序存储 
#include<iostream>
using namespace std;
typedef int Elemtype;
#define MAX_SIZE 25

class queue{
private:
	int head;
	int rear;
	Elemtype *data;
	int size;
	int cnt;//计数	
public:
	//1.队列的无参构造函数 
	queue();
	//2.队列的有参构造函数 
	queue(int s);
	//3.队列的析构函数 
	~queue();
	//4.入队操作 
	void push(Elemtype t);
	//5.出队操作
	bool pop(Elemtype&k);
	//6.判断队列是否为空 
 	bool isEmpty(); 
 	//7.判断队列是否满了
	bool isFull(); 
	//8.返回队尾元素
	Elemtype GetRear();
	//9.返回队头元素
	Elemtype GetHead();
	//10.清空队列
	void Clear();
	//11.打印队列
	void PrintQueue();
};
//1.队列的无参构造函数 
queue::queue()
{
	cnt=0; 
	head=0;
	rear=-1;
	size=MAX_SIZE;
	data=new Elemtype[size]; 
}
//2.队列的有参构造函数
queue::queue(int s)
{
	head=0;
	rear=-1;
	cnt=0;
	if(size>MAX_SIZE)
	{
		size=MAX_SIZE;
		data=new Elemtype[size];
	}
	else
	{
		size=s;
		data=new Elemtype[size];
	}
		
}
//3.队列的析构函数
queue::~queue()
{
	delete []data;
 } 
 //4.入队操作 
void queue::push(Elemtype t)
{
	if(!isFull())
	{
		rear=(rear+1)%size;
		data[rear]=t;
		cnt++;
	}
	else
	{
		cout<<"队列已满"<<endl; 
		return ;
	}
}
//5.出队操作
bool queue::pop(Elemtype&k)
{
	if(!isEmpty())
	{
		k=data[head];
		head=(head+1)%size;	
		cnt--;
		return true;
	}
	else
	return false;
 } 
 //6.判断队列是否为空 
 bool queue::isEmpty()
{
	return cnt==0;
}
//7.判断队列是否满了
bool queue::isFull()
{
	return cnt==MAX_SIZE;
}

 //8.返回队尾元素
Elemtype queue::GetRear()
{
	if(!isEmpty())
	{
		return data[rear];
	}
	return 0;
}
//9.返回队头元素
Elemtype queue::GetHead()
{
	if(!isEmpty())
	{
		return data[head];
	}
	return 0;
}
//10.清空队列
void queue::Clear()
{
	head=-1;
	rear=-1;
	cnt=0;
 } 
//11.打印队列
void queue::PrintQueue()
{
	if(!isEmpty())
	{
		int p=head;
		int q=rear;
		while(p%size!=q)
		{
			cout<<data[p]<<" ";
			p=(p+1)%size;
		}
		cout<<endl;
	}
 } 
 //12.测试案例
void test01()
{
	int k;
	queue Queue;
	Queue.push(56);
	Queue.push(59);
	Queue.push(98);
	Queue.push(15);
	Queue.push(46);
	Queue.push(78);
	cout<<"队头元素为:"<<Queue.GetHead()<<endl;
	cout<<"队尾元素为:"<<Queue.GetRear()<<endl;
	cout<<"打印队列元素:"; 
	Queue.PrintQueue();
	Queue.pop(k);
	cout<<"弹出元素:"<<k<<endl;
	cout<<"打印队列元素:"; 
	Queue.PrintQueue();
 } 
 int main()
 {
 	test01();
 }

循环队列测试结果
在这里插入图片描述
在这里插入图片描述

举报

相关推荐

0 条评论