数据结构——顺序队列

1.队列特点

1 .栈:(First in last out)
2.队列:(First in first out)

队列可以在表的两端进行操作。栈只能在栈顶进行插入和删除。

两端允许操作的类型不一样:可以进行删除的一端称为队头,这种操作也叫出队;

可以进行插入的一端称为队尾,这种操作也叫入队。总的来说,队头只能出队,队尾只能入队

队列也是一种特殊的线性表;所以队列的实现也有两种形式,一种是数组实现队列,一种是用链表实现队列。
数组形式又分为顺序对列和循环队列

2.顺序队列功能实现

0.顺序队列类的定义

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

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

1.队列的无参构造函数

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

2.队列的有参构造函数

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

3.队列的析构函数

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

4.入队操作

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

5.出队操作

//5.出队操作
Elemtype queue::pop()
{
	if(!isEmpty())
		return data[head++];
 } 

6.判断队列是否为空

//6.判断队列是否为空 
 bool queue::isEmpty()
{
	bool flag = head > rear;     //当head和tail不为-1时
 
	if(head == -1 && rear == -1) //当head=tail=-1时
	{
		flag = true;
	}
 
	if(flag)
	{
		head = rear = -1;
	}
 
	return flag;
}

7.判断队列是否满了

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

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

11.打印队列

//11.打印队列
void queue::PrintQueue()
{
	if(!isEmpty())
	{
		for(int i=head;i<=rear;i++)
		{
			cout<<data[i]<<" ";
		}
		cout<<endl;
	}
 } 

12.测试案例

 //12.测试案例
void test01()
{
	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();
	cout<<"弹出元素:"<<Queue.pop()<<endl;
	cout<<"打印队列元素:"; 
	Queue.PrintQueue();
 } 

3.顺序队列总源码

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

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

 //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;
 } 
//11.打印队列
void queue::PrintQueue()
{
	if(!isEmpty())
	{
		for(int i=head;i<=rear;i++)
		{
			cout<<data[i]<<" ";
		}
		cout<<endl;
	}
 } 
 //12.测试案例
void test01()
{
	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();
	cout<<"弹出元素:"<<Queue.pop()<<endl;
	cout<<"打印队列元素:"; 
	Queue.PrintQueue();
 } 
 int main()
 {
 	test01();
 }

测试结果
在这里插图片描述
在这里插入图片描述

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒野大飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值