队列的顺序存储结构

来源:互联网 发布:阿里云服务器怎么维护 编辑:程序博客网 时间:2024/04/29 09:44

队列的顺序存储结构——循环队列

循环队列的长度为(rear-front+QueueSize)%QueueSize

队空的条件: front=rear

队满的条件是: (rear+1)%QueueSize=front


#include<iostream>using namespace std;#define maxsize 20typedef int ElemType;typedef struct{ElemType data[maxsize];int front;//头指针int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置  } SqQueue;bool InitQueue(SqQueue *pq){   cout << "Init Queue ..." << endl;   pq->front=0;   pq->rear=0;   return true;}bool ClearQueue(SqQueue *pq){    cout << "Clear Queue ..." << endl;    pq->front = 0;    pq->rear = 0;    return true;}bool QueueEmpty(SqQueue Sq){    return (Sq.front == Sq.rear); /* 队列空的标志 */}    int QueueLength(SqQueue Sq){    /* 队列的当前长度 */    return (Sq.rear - Sq.front + MAXSIZE) % MAXSIZE;}  /* 返回头元素 */bool GetHead(SqQueue Sq, ElemType *pe){    if (QueueEmpty(Sq))        return false;    else    {        *pe = Sq.data[Sq.front];        cout << "Get Head Item " << *pe << endl;        return true;    }}bool EnQueue(SqQueue *pq, ElemType Elem){ /* 队列满 */    if (QueueLength(*pq) == MAXSIZE)        return false;    cout << "EnQueue Item " << Elem << endl;    pq->data[pq->rear] = Elem;/* 将元素赋值给队尾 */    pq->rear = (pq->rear + 1) % MAXSIZE;/* rear指针向后移一位置, */    /* 若到最后则转到数组头部 */        return true;}bool DeQueue(SqQueue *pq, ElemType *pe){    if (QueueEmpty(*pq))        return false;    *pe = pq->data[pq->front];/* 将队头元素赋值给*pe */    cout << "DeQueue Item " << *pe << endl;    pq->front = (pq->front + 1) % MAXSIZE;/* front指针向后移一位置, */    /* 若到最后则转到数组头部 */    return true;}bool QueueTraverse(SqQueue Sq)//遍历 {    cout << "Queue Traverse ..." << endl;    for (int i = 0; Sq.front + i < Sq.rear; i = (i + 1) % MAXSIZE)        cout << Sq.data[i + Sq.front] << ' ';    cout << endl;    return true;}int main(void){    SqQueue Sq;    InitQueue(&Sq);    for (int i = 0; i < 5; i++)        EnQueue(&Sq, i);    QueueTraverse(Sq);    int result;    GetHead(Sq, &result);    DeQueue(&Sq, &result);    DeQueue(&Sq, &result);    if (!QueueEmpty(Sq))        cout << "Queue Length: " << QueueLength(Sq) << endl;    QueueTraverse(Sq);        return 0;}


0 0
原创粉丝点击