循环队列的定义及操作

来源:互联网 发布:飞狐软件免费吗 编辑:程序博客网 时间:2024/05/16 16:13
#include <stdio.h>#include <malloc.h>#define MAXSIZE 50typedef struct{    int element[MAXSIZE];    int front; //队头指示器    int rear;  //队尾指示器} SeqQueue;void InitQueue(SeqQueue *Q);//初始化操作,将Q初始化为一个空的循环队列bool EnterQueue(SeqQueue *Q,int x);//入队,将元素x入队bool DeleteQueue(SeqQueue *Q,int *x);//出队,删除队列的队头元素,用x返回其值int main(void){    SeqQueue S;    SeqQueue *s=&S;    int x;    int *a=&x;    InitQueue(s);    for(int i=1; i<=10; i++)        EnterQueue(s,i);    for(int i=1; i<=10; i++)    {        DeleteQueue(s,a);        printf("%d ",x);    }    printf("\n");    return 0;}void InitQueue(SeqQueue *Q)//初始化操作,将Q初始化为一个空的循环队列{    Q->front=Q->rear=0;}bool EnterQueue(SeqQueue *Q,int x)//入队,将元素x入队{    if((Q->rear+1)%MAXSIZE==Q->front)//尾指针加一追上头指针,队列已满        return false;    Q->element[Q->rear]=x;    Q->rear=(Q->rear+1)%MAXSIZE;    return true;}bool DeleteQueue(SeqQueue *Q,int *x)//出队,删除队列的队头元素,用x返回其值{    if(Q->front==Q->rear)//队列为空        return false;    *x=Q->element[Q->front];    Q->front=(Q->front+1)%MAXSIZE;//重新设置队头指针    return true;//操作成功}

原创粉丝点击