队列的顺序存储结构

来源:互联网 发布:iphone 阅读软件 编辑:程序博客网 时间:2024/04/29 09:14

队列是一种先进先出(First In First Out)的线性表,简称FIFO。在队尾进行插入(front),在队头进行删除(rear)。

以下以一个循环队列为例进行实现。

循环队列空的条件是front == rear,当队列满时,保留一个元素空间,则队列满的条件是(rear+1)%MAXSIZE == front;如上图、下图所示。


#include<iostream>using namespace std;const int MAXSIZE = 20;    const int OK = 1;    const int ERROR =0;    typedef int Status;    typedef int ElemType; typedef struct{  ElemType data[MAXSIZE];  int front;//头,出   int rear;//尾,进 }SqQueue;Status InitQueue(SqQueue* Q){       Q->front = 0;       Q->rear =0;       return OK;}int QueueLength(SqQueue Q){  return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;    }Status EnQueue(SqQueue *Q, ElemType e){ if((Q->rear+1)%MAXSIZE == Q->front)//队列满     return ERROR; Q->data[Q->rear] = e; Q->rear = (Q->rear+1)%MAXSIZE; return OK;}Status DeQueue(SqQueue *Q,ElemType *e){       if(Q->front == Q->rear)//队列空           return ERROR;       *e = Q->data[Q->front];       Q->front = (Q->front+1)%MAXSIZE;       return OK;}void PrintQueue(SqQueue Q){     for(int i=Q.front;i<Q.rear;i++)//输出按普通队列输出,本demo中的队列是循环队列         cout<<Q.data[i]<<" ";     cout<<endl;}int main(){  SqQueue queueA;  InitQueue(&queueA);  int i=0;  for(i=0;i<10;i++)  {    EnQueue(&queueA, i*i);    cout<<i*i<<"入队列"<<endl;  }   PrintQueue(queueA);   cout<<"=========="<<endl;  ElemType e;  for(i=0;i<5;i++)  {    DeQueue(&queueA, &e);    cout<<e<<"出队列"<<endl;  }   PrintQueue(queueA);   getchar();   return 0;}
结果


原创粉丝点击