【无标题】

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

相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark3 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark3 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法