1.队列是一种删除只能在队头,插入只能在队尾的线性表,循环队列是为了克服“假溢出”而提出的一种对队列的改进,将队列看成一个首尾相接的环。连续存储结构的循环队列是通过数组实现的。
2.操作:先进先出
3.初始化(空队列):pront = tail =conut = 0;
4.非空队列中,pront指向对头元素,tail指向队尾元素的下一个单元。
5.空队列和满队列都满足pront = tail,所以通过计数器count来统计元素个数。
6.队列结构体
struct queue
{
datatype data[MAXSIZE];
int front;
int tail;
int count;
};
7.队列的基本运算实现代码
#include<iostream>
using namespace std;
typedef int datatype;
#define MAXSIZE 100
struct queue
{
datatype data[MAXSIZE];
int front;
int tail;
int count;
};
// init queue
void initqueue(queue *s)
{
s->front = s->tail = s->count = 0;
}
// in queue
queue * inqueue(queue *s, datatype x)
{
if(s->count ==MAXSIZE)
return NULL; // overout
s->data[s->tail] = x;
s->tail = s->tail + 1;
s->count++;
}
// creat queue
queue *creatqueue(int n)
{
queue *p = new queue;
initqueue(p);
for(int i = 0; i < n; i++)
{
datatype x;
cin >> x;
inqueue(p, x);
}
return p;
}
// out queue
int outqueue(queue *s, datatype &x)
{
if(s->front == s->tail)
return -1;
x = s->data[s->front];
s->front = s->front + 1;
s->count--;
return 0;
}
// print queue
int show(queue *s)
{
if(s->front == s->tail)
return -1; //empty queue
while(s->front != s->tail)
{
datatype y;
outqueue(s, y);
cout << y << ends;
}
cout << endl;
return 0;
}
int main()
{
queue *q = creatqueue(5);
show(q);
system("pause");
return 0;
}