数据结构------循环队列

/*
循环队列:逻辑上循环 ,本质:单链表
基本操作:初始化、判空、入队、出队
队列:长度、如何存元素、对头和队尾指针
对空: rear == front
对满: (rear+1)%Maxsize == front
*/

#include <stdio.h>
#define Maxsize 10
typedef struct
{
int data[Maxsize];
int front, rear; //头尾指针
}SqQueue;

void InitQueue(SqQueue *Q)
{
(*Q).front = (*Q).rear = NULL;
}

int QueueEmpty(SqQueue Q)
{
if (Q.front == Q.rear)
return 1;
else
return 0;
}

int EnQueue(SqQueue *Q, int x)
{
//可以入队吗?
if (((*Q).rear + 1) % Maxsize == (*Q).front)
return 0;
//可以入队 rear入
(*Q).data[(*Q).rear] = x;
(*Q).rear = ((*Q).rear + 1) % Maxsize;
return 1;
}

int DeQueue(SqQueue *Q, int *e)
{
//可以出队吗?
if ((*Q).front == (*Q).rear)
return 0;
//可以出队 front出
*e = (*Q).data[(*Q).front];
(*Q).front = ((*Q).front + 1) % Maxsize;
return *e;
}

 


int main()
{
int e = 0;
SqQueue S; //创建一个循环队列
InitQueue(&S);
QueueEmpty(S);
EnQueue(&S,23);

e = DeQueue(&S, &e);
if (e != 0 ) printf("出队成功,出队元素是:%d \n",e);
else printf("出队失败\n");

return 0;
}