队列特点 FIFO
尾入头出
顺序存储实现
顺序队列
数据类型
#define MAX 6
typedef int DataType;
typedef struct
{
DataType buf[MAX];
//front记录队头元素前一位置(下标)
int front;
//rear记录队尾元素位置(下标)
int rear;
}SeqQueue;
循环队列
数据类型
#define MAX 6
typedef int DataType;
typedef struct
{
DataType buf[MAX];
//front记录队头元素位置(下标)
int front;
//rear记录队尾元素下一位置(下标)
int rear;
}LoopQueue;
队列的顺序存储实现
数据类型
#define MAX 6
typedef int DataType;
typedef struct
{
DataType buf[MAX];
int front;
int rear;
}LoopQueue;
循环队列
1.front 记录队头元素的下标,
rear 记录队尾元素下一个位置下标
2.队空条件:front == rear
3.更新front rear 的方法
front = (front + 1) % MAX;
rear = (rear + 1) % MAX;
4.队满条件
front == (rear + 1) % MAX
常用操作
1.创建空的循环队列,front = rear = 0
LoopQueue *create_empty_loopqueue()
{
}
2.判空front == rear
int is_empty_loopqueue(LoopQueue *q)
{
}
3.判满 front == (rear + 1) % MAX
int is_full_loopqueue(LoopQueue *q)
{}
4.入队 先插入数据,再移动rear
int enter_loopqueue(LoopQueue *q,DataType data)
{
}
5.出队 先取出数据,再移动front
DataType delete_loopqueue(LoopQueue *q)
{
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 6
typedef int DataType;
typedef struct
{
//存储数据
DataType buf[MAX];
//记录队头元素下标
int front;
//记录队尾元素下一位置下标
int rear;
}LoopQueue;
LoopQueue *create_empty_loopqueue()
{
LoopQueue *q = NULL;
q = (LoopQueue *)malloc(sizeof(LoopQueue));
memset(q,0,sizeof(LoopQueue));
q->front = q->rear = 0;
return q;
}
int is_empty_loopqueue(LoopQueue *q)
{
return q->front == q->rear;
}
int is_full_loopqueue(LoopQueue *q)
{
return q->front == (q->rear + 1) % MAX;
}
int enter_loopqueue(LoopQueue *q,DataType data)
{
q->buf[q->rear] = data;
q->rear = (q->rear + 1) % MAX;
return 0;
}
DataType delete_loopqueue(LoopQueue *q)
{
DataType data;
data = q->buf[q->front];
q->front = (q->front + 1) % MAX;
return data;
}
int main()
{
LoopQueue *q = NULL;
int i = 0;
q = create_empty_loopqueue();
while(!is_full_loopqueue(q))
{
enter_loopqueue(q,i++);
}
while(!is_empty_loopqueue(q))
{
printf("%d ",delete_loopqueue(q));
}
putchar('\n');
puts("====================================");
while(!is_full_loopqueue(q))
{
enter_loopqueue(q,i++);
}
while(!is_empty_loopqueue(q))
{
printf("%d ",delete_loopqueue(q));
}
putchar('\n');
return 0;
}