您的位置:首页 > 其它

循环队列的定义及操作

2017-05-21 18:32 190 查看
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 50

typedef 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;//操作成功
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: