【无标题】

复制代码
#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.循环队列的的优点,插入的队列的时间复杂度低,不用开辟新的空间

相关推荐
努力努力再努力wz12 小时前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
Gauss松鼠会12 小时前
GaussDB(DWS) 资源监控Topsql
java·网络·数据库·算法·oracle·性能优化·gaussdb
夏日听雨眠12 小时前
数据结构(快速排序)
java·数据结构·算法
薇茗12 小时前
【初阶数据结构】 升沉有序的平仄 排序 3
c语言·开发语言·数据结构·算法·排序算法·文件归并排序
薇茗12 小时前
【初阶数据结构】 升沉有序的平仄 排序 2
c语言·数据结构·算法·排序算法·快排精讲
AI科技星13 小时前
强哥德巴赫猜想(1+1)终极证明(2026 年5月 21 日)
开发语言·人工智能·算法·计算机视觉·量子计算
人道领域13 小时前
【LeetCode刷题日记】654.最大二叉树:递归算法详解
java·算法·leetcode
Controller-Inversion13 小时前
105. 从前序与中序遍历序列构造二叉树
数据结构·算法
故事和你9113 小时前
洛谷-【图论2-4】连通性问题2
开发语言·数据结构·c++·算法·动态规划·图论