#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 8
typedef struct Loop_line{
int data[MAXSIZE];
int front,rear;
}Sequene;
//初始化操作
void Line_Init(Sequene *Q){
Q->front=0;
Q->rear=0;
}
//队满判断
//队空判断
//插入操作
int Line_insert(Sequene *Q,int datain){
Q->data[Q->rear]=datain;
Q->rear=(Q->rear+1)% MAXSIZE;
return 0;
}
//读取操作
int Line_pop(Sequene *Q){
int dataout;
dataout=Q->data[Q->front];
Q->front=(Q->front+1)% MAXSIZE;
return dataout;
}
//遍历操作
int Line_view(Sequene *Q){
int num,i,dataout;
num=(Q->rear-Q->front+MAXSIZE)%MAXSIZE;
printf("num=%d\r\n",num);
i = Q->front ;
while (i != Q->rear) {
printf("dataout :%d ", Q->data[i]);
i = (i + 1) % MAXSIZE;
}
}
int main() {
int datain[10]={1,2,3,4,5,6,7,8,9};
int temp,i;
Sequene Q;
Line_Init(&Q);
for(i=0;i<3;i++)
{
Line_insert(&Q,datain[i]);
Line_view(&Q);
printf("===\r\n");
// temp=Line_pop(&Q);
// printf("pop=%d\r\n",temp);
}
printf("end\r\n");
}
如果循环队列的入队没有判断队满、队空的条件。
bug:出现的队列数据被覆盖,

在数据没有大于maxsize的情况下,都能保存,一旦数据的大于maxsize 则就被覆盖

会出现溢出的数据覆盖之前的数据。
修正
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 8
typedef struct Loop_line{
int data[MAXSIZE];
int front,rear;
}Sequene;
//初始化操作
void Line_Init(Sequene *Q){
Q->front=0;
Q->rear=0;
}
//队满判断
//队空判断
//插入操作
int Line_insert(Sequene *Q,int datain){
if((Q->rear+1)%MAXSIZE==Q->front)//队满
return 1;
Q->data[Q->rear]=datain;
Q->rear=(Q->rear+1)% MAXSIZE;
return 0;
}
//读取操作
int Line_pop(Sequene *Q){
int dataout;
if(Q->rear==Q->front) //队空
return 1;
dataout=Q->data[Q->front];
Q->front=(Q->front+1)% MAXSIZE;
return dataout;
}
//遍历操作
int Line_view(Sequene *Q){
int num,i,dataout;
num=(Q->rear-Q->front+MAXSIZE)%MAXSIZE;
printf("num=%d\r\n",num);
i = Q->front ;
while (i != Q->rear) {
printf("dataout :%d ", Q->data[i]);
i = (i + 1) % MAXSIZE;
}
}
int main() {
int datain[15]={1,2,3,4,5,6,7,8,9,48, 68, 94, 2, 30, 84,};
int temp,i;
Sequene Q;
Line_Init(&Q);
for(i=0;i<15;i++)
{
Line_insert(&Q,datain[i]);
Line_view(&Q);
printf("===\r\n");
// temp=Line_pop(&Q);
// printf("pop=%d\r\n",temp);
}
printf("end\r\n");
}
修正之后如下,发现数据在没有出队之前不会被新的入队数据挤占,并且不允许继续入队

总结:
1.队列的初始化;
2.队满判断,队空判断;
3.队的遍历,避免的遍历出队,用另一个变量替代该队列
4.循环队列的的优点,插入的队列的时间复杂度低,不用开辟新的空间