【无标题】

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

相关推荐
老师我太想进步了20265 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
风影同志783245 小时前
编码器是激活函数吗?—— 一个看起来很像、其实不是的类比
算法
UIU1145 小时前
P1481 魔族密码
c++·算法·动态规划
加宝的起点雷达9 小时前
40 条候选里 38 条来自同一个源,主卡整屏重样
人工智能·算法·创业
秋天的怀念_David9 小时前
算法一千零一夜 · 第二十六夜 协议的母语
java·spring boot·算法
闻缺陷则喜何志丹11 小时前
【C++特性】四种类型转
c++·算法·类型转换
喵本喵叁肆12 小时前
用 Boosting 把弱隐私算法炼成强隐私算法(英文原题:Boosting and Differential Privacy (FOCS 2010))
算法·集成学习·boosting
青梅味猪大肠12 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统