队列是一种动态集合,是比较常用的一种数据结构,它的特点就是:先进先出。
队列是一种特殊的线性表,他的特殊在于队列的插入和删除操作分别在表的两端进行。插入的一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别称为进队和出队。
生活中排队购票的等现象就是队列的例子,他的特点是先到先享受购票服务,正好和栈结构相反。对于一个队列:
{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;
}
测试结果
谢谢大家!