#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int front;
int rear;
}Queue;
void Init(Queue *q);
bool IsEmpty(Queue *q);
void Enter(Queue *q, ElemType e);
void Depart(Queue *q, ElemType *e);
void GetHeader(Queue *q, ElemType *e);
int GetLength(Queue *q);
void Print(Queue *q);
void Clear(Queue *q);
void Init(Queue *q)
{
q->front = q->rear = 0;
}
bool IsEmpty(Queue *q)
{
return (q->front == q->rear) ? true : false;
}
bool IsFull(Queue *q)
{
return (q->rear + 1) % MAXSIZE == q->front;
}
void Enter(Queue *q, ElemType e)
{
if (IsFull(q))
return;
q->data[q->rear] = e;
q->rear = (q->rear + 1) % MAXSIZE;
}
void Depart(Queue *q, ElemType *e)
{
if (IsEmpty(q))
return;
*e = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
}
void GetHeader(Queue *q, ElemType *e)
{
if (!IsEmpty(q))
*e = q->data[q->front];
}
int GetLength(Queue *q)
{
return (q->rear - q->front + MAXSIZE) % MAXSIZE;
}
void Print(Queue *q)
{
int p = q->front;
while (p != q->rear)
{
printf("%d ", q->data[p++]);
}
printf("\n");
}
void Clear(Queue *q)
{
q->front = q->rear = 0;
}
int main()
{
Queue q;
Init(&q);
for(int i = 1; i <= 20; ++i)
Enter(&q, i);
Print(&q);
ElemType e;
Depart(&q, &e);
printf("出队一次,出队元素为:%d\n", e);
GetHeader(&q, &e);
printf("此时队首元素为:%d,队列长度为:%d\n", e, GetLength(&q));
Clear(&q);
printf("清空该队列,此时");
if(IsEmpty(&q))
printf("队列为空\n");
else
printf("队列不为空\n");
return 0;
}
顺序循环队列的实现
最新推荐文章于 2023-05-15 16:21:26 发布