当前位置: 首页 > news >正文

网站建设色系搭配培训优化

网站建设色系搭配,培训优化,网站推广推广,湖北做网站系统哪家好文章目录 一、循环队列简介二、循环队列的判空和判满三、循环队列的实现leetcode 622. 设计循环队列 一、循环队列简介 在实际开发中,队列是一种常用的数据结构,而循环队列(Circular Queue)则一般是一种基于数组实现的队列&#x…

文章目录

  • 一、循环队列简介
  • 二、循环队列的判空和判满
  • 三、循环队列的实现
    • leetcode 622. 设计循环队列

一、循环队列简介

在实际开发中,队列是一种常用的数据结构,而循环队列(Circular Queue)则一般是一种基于数组实现的队列(也可使用循环链表)。与传统的 FIFO 队列相比,循环队列通过将数组首尾相连形成一个 “环”,能够更高效地利用内存空间。

循环队列的主要思想是:当队尾指针到达数组末端时,如果数组前面还有空余空间,就可以从数组头部重新利用这些空间进行入队操作。也就是说,数组的末端和头部通过逻辑上的连接,形成一个环状结构,从而避免了顺序队列中由于出队操作而导致的空间浪费问题。

如下图就是一个典型的循环队列,其中的 front 表示头指针,指向队头。rear 则表示尾指针,指向队尾元素的下一个位置

请添加图片描述

二、循环队列的判空和判满

在循环队列中,frontrear 都是可以循环移动的,当队空时,front == rear 成立;当队满时,front == rear 也成立。因此显然不能只凭 front == rear 来判断队空还是队满。

为了解决这个问题,在循环队列中约定:少用一个元素空间,当队尾标识的 rear在队头标识front 的上一个位置时,队列为满。此时,判断队空和队满的条件分别如下:

队空时:front == rear

队满时:(rear + 1) % MAXSIZE == front

其中,MAXSIZE 是队列容量的大小

两种情况下队列中指针的状态如下图所示:

请添加图片描述

既然少一个元素空间,这就意味着,如果要存储的数据个数最大为 k,那么你需要开辟的循环队列的大小应为 k+1

三、循环队列的实现

我们来以具体的一道题目来实现循环队列的各种操作

leetcode 622. 设计循环队列

请添加图片描述

typedef struct {int* a;int front;  // 头“指针”指向队头数据int tail;  // 尾“指针”指向队尾的下一个位置int k;  // 一会儿开辟的队列大小为 k+1
} MyCircularQueue;bool myCircularQueueIsEmpty(MyCircularQueue* obj);
bool myCircularQueueIsFull(MyCircularQueue* obj);  // 前面先实现的函数要用到这两个接口,所以事先声明一下// 循环队列的初始化
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* cq = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));cq->a = (int*)malloc(sizeof(int)*(k+1));cq->front = 0;  // 初始化数据cq->tail = 0;cq->k = k;return cq;
}// 入队
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)) return false;  // 满了就不能再入了obj->a[obj->tail] = value;  // 将数据入进来++obj->tail; // 更新tailobj->tail %= (obj->k+1);  // tail 自增了之后可能超出循环队列的大小范围所以要取模// 模的是循环队列的大小 k+1return true;
}// 出队
bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)) return false;  // 为空就不能再删obj->front = (obj->front+1)%(obj->k+1);  // 和前面是一样的原理,注意同样是加一再取模return true;
}// 获取队头元素
int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)) return -1;return obj->a[obj->front];
}// 获取队尾元素
int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)) return -1;if(obj->tail == 0) return obj->a[obj->k];  // 跨越了一个循环的情况else return obj->a[obj->tail-1];
}// 判空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front == obj->tail;
}// 判满
bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->tail+1) % (obj->k+1) == obj->front;  // tail的后一个是front说明满了,但是有可能tail+1跨过了一个循环。所以要取模
}// 释放
void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);  // 注意这里要先释放结构体内的数组!!!不然会可能内存泄漏free(obj);  
}
http://www.cadmedia.cn/news/15327.html

相关文章:

  • 网站建设支付安全seo怎么学
  • bbs建站站长工具域名
  • 写小说的网站自己做封面网店推广策划方案
  • 最新的新开传奇网站惠州优化怎么做seo
  • 最便宜的重庆网站建设电脑培训班一般多少钱
  • 电子网站开发技术包括多层次网络营销合法吗
  • 查建筑公司资质的网站百度指数排名热搜榜
  • 云南网站推广多合一seo插件破解版
  • 武汉生活网站爱站网长尾关键词挖掘工具电脑版
  • 广西南宁电商网站建设百度seo排名软件
  • 网站制作软件教程郑州网站建设公司排名
  • 婚纱定制网站哪个好软文推广媒体
  • 三鼎网络网站建设百度seo多久能优化关键词
  • 吉林网络公司哪家好关键词优化推广公司
  • 郑州最好的装修设计公司怎么优化关键词
  • 重庆建设工程信息网官网入口网址北京百度seo工作室
  • 中国会议营销网站seo策略
  • 网络推广软件技巧杭州龙席网络seo
  • 模版营销型网站怎么做湖南靠谱seo优化公司
  • 吉林省建设信息网站关于网络营销的方法
  • 安徽省建设工程八大员报名网站关键词优化外包
  • 东营网红餐厅seo搜索引擎优化介绍
  • 网站建设合同纠纷站长网站大全
  • 马云是做网站的软文营销的宗旨是什么
  • 上海阿里巴巴网站建设网站外贸推广
  • 深圳高端展位设计公司seo推广seo技术培训
  • 网站建设违约产品推广介绍怎么写
  • 早期经典网页游戏南宁网站运营优化平台
  • 南昌网站建设公司机构黄页网站推广公司
  • 苹果电脑做网站好用吗免费发布广告信息平台