顺序循环队列定义:
实现此循环队列通过牺牲一个单元来区分头尾
结构体中的date数组用来存储队列中的数据元素
创建队头指针和队尾指针来找到数组的头和尾(以索引下标形式表示指针)
///顺序循环队列///
typedef struct{
int date[maxsize];//队列中数据元素
int front,rear;//对头队尾指针(以索引下标形式表示指针)
}sqqueue;
//实现一个循环队列
//牺牲一个单元来区分头尾
初始化函数:
传入q的指针进去先让q的队头指针和队尾指针为下标0
//初始化
void initqueue(sqqueue *q)
{
q->rear=q->front =0;//初始首尾指针
}
入队函数:
传入q的指针
先判满(即判断q的队尾指针+1再对数组容量取余是否等于队头指针)
如果没有满则
将结构体q的数组date的队尾指针写入数据x
再用循环数组将队尾指针往后移一个或者循环
//入队
void enqueue(sqqueue *q,int x)
{
//先判满,不满才能装
if((q->rear +1)%maxsize==q->front )
{
printf("队满");//队满,报错
}
else
{
q->date [q->rear]=x;
q->rear =(q->rear +1)%maxsize;//队尾指针加1取模
}
}
出队函数:
传入q的指针
先判空(即判断队尾指针是否等于队首指针)
如果非空则
把队首指针处的数据写入x
再将队首指针往后移动一个位置或者循环
再打印x的数值
//出队
void dequeue(sqqueue *q)
{
int x;//保存出队元素
//先判空,不空才能出
if(q->front ==q->rear)
{
printf("队空");//队空,报错
}
else
{
x=q->date [q->front];
q->front =(q->front +1)%maxsize;//队首指针加1取模
printf("%d\n",x);
}
}
总代码:
#include<stdio.h>
#include<stdlib.h>
#define maxsize 10
///顺序循环队列///
typedef struct{
int date[maxsize];//队列中数据元素
int front,rear;//对头队尾指针(以索引下标形式表示指针)
}sqqueue;
//实现一个循环队列
//牺牲一个单元来区分头尾
//初始化
void initqueue(sqqueue *q)
{
q->rear=q->front =0;//初始首尾指针
}
//入队
void enqueue(sqqueue *q,int x)
{
//先判满,不满才能装
if((q->rear +1)%maxsize==q->front )
{
printf("队满");//队满,报错
}
else
{
q->date [q->rear]=x;
q->rear =(q->rear +1)%maxsize;//队尾指针加1取模
}
}
//出队
void dequeue(sqqueue *q)
{
int x;//保存出队元素
//先判空,不空才能出
if(q->front ==q->rear)
{
printf("队空");//队空,报错
}
else
{
x=q->date [q->front];
q->front =(q->front +1)%maxsize;//队首指针加1取模
printf("%d\n",x);
}
}
int main()
{
sqqueue q;
initqueue(&q);
enqueue(&q,1);
enqueue(&q,2);
enqueue(&q,3);
enqueue(&q,4);
dequeue(&q);
dequeue(&q);
dequeue(&q);
enqueue(&q,3);
enqueue(&q,2);
dequeue(&q);
dequeue(&q);
dequeue(&q);
dequeue(&q);
return 0;
}