连续存储结构的循环队列实现

来源:互联网 发布:vnr网络连接不畅 编辑:程序博客网 时间:2024/04/25 18:27

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 100struct queue{       datatype data[MAXSIZE];       int front;       int tail;       int count;};// init queuevoid initqueue(queue *s){     s->front = s->tail = s->count = 0;}// in queuequeue * 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 queuequeue *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 queueint 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 queueint 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;}


0 0