循环队列设计

一、队列简介
特点:尾入头出的线性表,在一段进行插入操作,另一段进行删除操作
FIFO: first int first out

4项规定:
[1] front  表示队头元素的下标
rear 表示队尾元素下一个元素的下标

[2]队空条件:front == rear


[3]队满条件:front == (rear + 1) % MAX

[4]更新front和rear的方法
front = (front + 1) % MAX;
rear = (rear + 1) % MAX


二、数据类型的设计


#define MAX 10


typedef int DataType;  //元素的类型


typedef struct{
DataType buf[MAX];  //定义数组存储数据
int front; //表示队头元素的下标
int rear; //表示队尾元素下一个元素的下标
}LoopQueue;


三、操作步骤
<1>创建空的循环队列,q->front = q->rear = 0;
LoopQueue *create_empty_loopqueue()
{
//为循环队列在堆区分配空间,q保存空间首地址

//刚开始的时候front,和rear都指向了下标为0的位置

//返回q;
}
<2>判断队列是否为空,q->front == q->rear
int is_empty_loopqueue(LoopQueue *q)
{
//判断front和rear是否相等

//相等则返回1,不相等则返回0
}
<3>判断队列是否为满,q->front = (q->rear + 1) % MAX;
//front的值与(rear + 1) % MAX相等
int is_full_loopqueue(LoopQueue *q)
{
//判断front与(rear + 1) % MAX是否相等,
//相等返回1,不相等返回0
}
<4>入队
int enter_loopqueue(LoopQueue *q,DataType data)
{
//在buf中q->rear的位置插入数据data。

//然后移动rear,更新rear的值。
}


<5>出队
DataType delete_loopqueue(LoopQueue *q)
{
DataType data = 0;
//取出数据把值给我们的data。

//然后更新rear的值

//把获得的data的值返回。


}


int main()
{


//创建一个新的循环队列
LoopQueue *q = create_empty_loopqueue();
int i = 0;

while(!is_full_loopqueue(q))
{
enter_loopqueue(q,i++);
}
 
while(!is_empty_loopqueue(q))
{
printf("%d ",delete_loopqueue(q));
}
putchar('\n');
 
return 0;
}
发布了20 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/pan337520/article/details/53353674