C++实现队列结构

本文详细介绍了队列的基本概念、生活中的应用场景,并提供了C++类my_queue的实现,包括入队push、出队pop、查看队头front、判断空队empty和获取队列大小size的方法。通过实例演示了队列的操作过程。
摘要由CSDN通过智能技术生成

队列是一种动态集合,是比较常用的一种数据结构,它的特点就是:先进先出。

队列是一种特殊的线性表,他的特殊在于队列的插入和删除操作分别在表的两端进行。插入的一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别称为进队和出队。

生活中排队购票的等现象就是队列的例子,他的特点是先到先享受购票服务,正好和栈结构相反。对于一个队列:

{k0,k1,k2,k3,k4,......kn}

k0就是队首,kn就是队尾,出队时则是k0先出队,假如kn+1要入队则排到kn的后面。

假如一个队列的初始元素为:

如果在队列中插入一个元素9,则变成

 之后在队列中进行一次出队操作,则变成


 经过分析,我们就能得出队列中的一些属性:

                队列:myqueue

                队列最大容量:maxsize

                队列当前容量:    int curSize

                指向队头的指针:Front

                指向队尾的指针:tail

                入队的成员函数:void push(int data)

                出队的成员函数:void pop()

                获取队头元素成员函数:int front()

                判断是否为空成员函数:bool empty()

                返回队列元素个数成员函数:int size()

 类的结构:
           


class my_queue {
public:
	my_queue(int maxsize = 100) :maxsize(maxsize)
	{
		myqueue = new int[maxsize];
		assert(myqueue);//断言处理,若申请内存失败,则引发中断
		curSize = 0;
		this->Front = 0;
		tail = 0;
	}
	~my_queue()
	{
		delete myqueue;
	}
	void push(int data);
	void pop();
	int front();
	bool empty();
	int size();
protected:
	int maxsize;//最大容量
	int* myqueue;//队列数组
	int Front; //指向队头元素
	int tail;//指向队尾元素
	int curSize;//队列中的元素个数
};

                

入队的成员函数:void push(int data)

void my_queue::push(int data)
{
	if (curSize < maxsize)
	{
		myqueue[++tail] = data;
		curSize++;
	}
	else cout << "队列已满,无法插入" << endl;
}

  出队的成员函数:void pop()

void my_queue::pop()
{
	if (curSize > 0)
	{
		Front++;
		--curSize;
	}
	else cout << "队列已空,无法出队" << endl;
}

  获取队头元素成员函数:int front()

int my_queue::front()
{
	return myqueue[Front];
}

  判断是否为空成员函数:bool empty()


bool my_queue::empty()
{
	if (curSize == 0)
		return true;
	else return false;
}

            返回队列元素个数成员函数:int size()


int my_queue::size()
{
	return curSize;
}

总代码:

#include<iostream>
#include<vector>
#include<string>
#include<assert.h>
using namespace std;

class my_queue {
public:
	my_queue(int maxsize = 100) :maxsize(maxsize)
	{
		myqueue = new int[maxsize];
		assert(myqueue);//断言处理,若申请内存失败,则引发中断
		curSize = 0;
		this->Front = 1;
		tail = 0;
	}
	~my_queue()
	{
		delete myqueue;
	}
	void push(int data);
	void pop();
	int front();
	bool empty();
	int size();
protected:
	int maxsize;//最大容量
	int* myqueue;//队列数组
	int Front; //指向队头元素
	int tail;//指向队尾元素
	int curSize;//队列中的元素个数
};

int main()
{
	int temp[] = { 3,5,7,1,3,6 };
	my_queue que(20);
	for (int i = 0; i < 6; i++) que.push(temp[i]);

	while (que.empty() != true)
	{
		cout << que.front() << endl;
		que.pop();
	}

	return 0;
}

void my_queue::push(int data)
{
	if (curSize < maxsize)
	{
		myqueue[++tail] = data;
		curSize++;
	}
	else cout << "队列已满,无法插入" << endl;
}

void my_queue::pop()
{
	if (curSize > 0)
	{
		Front++;
		--curSize;
	}
	else cout << "队列已空,无法出队" << endl;
}

int my_queue::front()
{
	return myqueue[Front];
}

bool my_queue::empty()
{
	if (curSize == 0)
		return true;
	else return false;
}

int my_queue::size()
{
	return curSize;
}

测试结果

谢谢大家!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值