【无标题】

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

相关推荐
信奥卷王几秒前
[GESP202503 六级] 树上漫步(含视频)
算法
Purple Coder20 分钟前
南京-我来啦
算法
w_zero_one26 分钟前
动态规划(三)
java·算法·动态规划
Logic10138 分钟前
C语言/数据结构贡献法题解:数组权值——所有连续子数组中不同数字个数之和(O(n)解法)
c语言·数据结构·算法·数组·时间复杂度·贡献法·哈希记录
DongQiShanRen38 分钟前
六根硬件映射(中):双站校验、生克闭环与驱动接口
数据库·人工智能·算法·rust·哈希算法·集成学习
mmmmath_31 小时前
LeetCode.637.二叉树的层平均值
算法·leetcode
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:并查集连通块与朋友圈问题解析
c++·python·算法·bfs·信息学竞赛
Tisfy1 小时前
LeetCode 2913.子数组不同元素数目的平方和 I:第一题先常数很大的O(n^2)
算法·leetcode·题解·模拟·暴力
罗湖老棍子1 小时前
[USACO05NOV] Asteroids G(洛谷-P7368)
算法·图论·二分图匹配·最大匹配·最小顶点覆盖
AI技术新视界1 小时前
Harness^2:递归自进化智能体Harnessing框架
人工智能·深度学习·算法·harness·rsi