【无标题】

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

相关推荐
全栈技术负责人22 分钟前
DeepSeek Harness 业务工具权限插件 dsh-tool-permission设计思路
网络·算法·ai·ai编程
mmmmath_326 分钟前
面试题 02.07. 链表相交
算法·链表
residual_fan1 小时前
特征级SMOTE(Feature-level SMOTE)论文分享
人工智能·算法·数据挖掘·数据分析
xxwxx__1 小时前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
sylviiiiiia1 小时前
Leetcode hot100 多数元素/相交链表/反转链表
算法·leetcode·链表
CoderYanger1 小时前
A.每日一题:3622. 判断整除性
java·程序人生·算法·leetcode·面试·职场和发展·蓝桥杯
rannn_1111 小时前
【力扣hot100】动态规划专题|70、118、198、279、322、139、300、152、416、32
算法·leetcode·动态规划
渡之1 小时前
ArduPilot(APM)滤波器之 HarmonicNotchFilter 深度解析
算法·无人机
我不会起名字3221 小时前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
lvwangshu2 小时前
exBSGS 算法
数学·算法