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