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

如何做导购网站网站建设 企业文化

如何做导购网站,网站建设 企业文化,网站设计用户体验,平面设计素材网站哪个好文章目录 1. 循环队列的概念2. 循环队列的分类2.1 数组实现(3种判定)1)增加一个 size2)多开一个位置 2.2 链表实现 3. 循环队列实现3.1 接口设计3.2 接口实现1)创建队列2)实现判定空或满3)入队和…

文章目录

  • 1. 循环队列的概念
  • 2. 循环队列的分类
    • 2.1 数组实现(3种判定)
      • 1)增加一个 `size`
      • 2)多开一个位置
    • 2.2 链表实现
  • 3. 循环队列实现
    • 3.1 接口设计
    • 3.2 接口实现
      • 1)创建队列
      • 2)实现判定空或满
      • 3)入队和出队
      • 4)获取队首队尾数据
      • 5)销毁
    • 3.3 从”获取队尾数据方法“引申 “计算循环队列数据个数”
  • 4. 完成力扣题目
    • 4.1 完整代码
    • 4.2 提交截图

1. 循环队列的概念

在实际中,有时还会使用一种队列叫循环队列。

循环队列是一种线性数据结构,其操作表现基于 FIFO( 先进先出 )原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

循环队列

2. 循环队列的分类

要想实现一个循环队列,除了要满足先进先出的特性,还要能判断循环队列是否满或者空,同时能拿到队头队尾的数据。下面主要讲解循环队列满或者空如何实现

2.1 数组实现(3种判定)

数组的插入就是在尾部 back 下标插入然后将其加一;而删除就是将数组头 front 往前走一步即可。下面将讲解如何进行循环队列满或者空的判定方法

1)增加一个 size

size == 0 就是空, size != 0 就是满

2)多开一个位置

空间开 k+1 个,当 front == back 就是空;当 (back+1)%(k+1) == front 就是满。这里的 % 是防止数组越界。

数组

2.2 链表实现

单链表的其他操作都很好处理,但唯独很难处理去队尾数据。

这里可以通过 增加一个 backprev 指针 或者 改成双向链表 就可以解决

链表

看上去链表比较容易实现,但难在初始化以及更多的判断操作以及空间上的开销。因此,下面将 用数组实现,并使用第二种判定方法

3. 循环队列实现

下面将以力扣题目 622. 设计循环队列 - 力扣(LeetCode) 进行讲解。

3.1 接口设计

typedef struct {int*a;		// 数组int front;	// 队列头int back;	// 队列尾int k;		// 数组大小
} MyCircularQueue;// 创建循环队列,给出
MyCircularQueue* myCircularQueueCreate(int k);
// 判断是否空
bool myCircularQueueIsEmpty(MyCircularQueue* obj);
// 判断是否满
bool myCircularQueueIsFull(MyCircularQueue* obj);
// 入队,成功则返回true
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value);
// 出队,成功则返回true
bool myCircularQueueDeQueue(MyCircularQueue* obj);
// 获取队首数据,如果队列为空,返回 -1
int myCircularQueueFront(MyCircularQueue* obj);
// 获取队尾数据,如果队列为空,返回 -1
int myCircularQueueRear(MyCircularQueue* obj);
// 销毁
void myCircularQueueFree(MyCircularQueue* obj);

3.2 接口实现

1)创建队列

这里需要开辟 k+1 个空间,从而进行第二种判定方法

MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a = (int*)malloc(sizeof(int) * (k + 1));obj->front = 0;obj->back = 0;obj->k = k;return obj;
}

2)实现判定空或满

首先实现这两个函数,有利于后续函数复用,简化代码

空或满

// 相等则为空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front == obj->back;
}// 因为要防止数组越界,所以要进行%操作
// 要注意开辟的空间是k+1,因此要%obj->k+1
bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->back+1)%(obj->k+1)==obj->front;
}

3)入队和出队

入队和出队就相对简单了,要注意数组不要越界即可

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;obj->a[obj->back]=value;obj->back++;obj->back%=(obj->k+1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return false;// 直接加1即可,不需要覆盖数据obj->front++;obj->front%=(obj->k+1);return true;
}

4)获取队首队尾数据

对于队首数据 :首先判定是否为空,然后直接获取

对于队尾数据 :首先也是判定是否为空,然后获取,这里要注意数据越界。此处可以直接用 if else 进行判定,但还有更简单的办法: (obj->back-1+obj->k+1)%(obj->k+1) ,简化过后就是 (obj->back+obj->k)%(obj->k+1)

队尾数据简化

int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;return obj->a[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return -1;//return obj->a[(obj->back-1+obj->k+1)%(obj->k+1)];return obj->a[(obj->back+obj->k)%(obj->k+1)];//简化
}

5)销毁

void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}

3.3 从”获取队尾数据方法“引申 “计算循环队列数据个数”

正常清空就是 back-front ,但会出现越界;这时采用上述方法,就可以写成: (back + (k+1) - front) % (k+1) ,具体代码可以自己进行实现

数据个数

4. 完成力扣题目

4.1 完整代码

typedef struct {int*a;int front;int back;int k;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a = (int*)malloc(sizeof(int) * (k + 1));obj->front = 0;obj->back = 0;obj->k = k;return obj;
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->front == obj->back;
}bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->back+1)%(obj->k+1)==obj->front;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj))return false;obj->a[obj->back]=value;obj->back++;obj->back%=(obj->k+1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj))return false;obj->front++;obj->front%=(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;return obj->a[(obj->back-1+obj->k+1)%(obj->k+1)];return obj->a[(obj->back+obj->k)%(obj->k+1)];//简化
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}

4.2 提交截图

提交

至此,队列的学习完全结束!


文章转载自:

http://BdJeK8ES.sprbs.cn
http://bntqI7uG.sprbs.cn
http://yTabfkw8.sprbs.cn
http://S84q5b5E.sprbs.cn
http://ZJMX16x1.sprbs.cn
http://Qzm7whYW.sprbs.cn
http://wqGJmPMV.sprbs.cn
http://PIBPhY51.sprbs.cn
http://1PL2HoJA.sprbs.cn
http://zNNidolY.sprbs.cn
http://2dSyvnXk.sprbs.cn
http://ghqBGl2N.sprbs.cn
http://K50P5epM.sprbs.cn
http://F0Rt9FuR.sprbs.cn
http://SoFqW4mB.sprbs.cn
http://BjyZF97E.sprbs.cn
http://T6KXPFLK.sprbs.cn
http://3165p4hS.sprbs.cn
http://wyJFQyD5.sprbs.cn
http://Te6cuwqZ.sprbs.cn
http://jrsGIK4F.sprbs.cn
http://1mdv0OZA.sprbs.cn
http://stQZtCuJ.sprbs.cn
http://qbV74JlU.sprbs.cn
http://ohT9bvez.sprbs.cn
http://E8srdYEj.sprbs.cn
http://4qFrVqP4.sprbs.cn
http://7gTfxPeQ.sprbs.cn
http://oIE4jDHY.sprbs.cn
http://LcEhDJPp.sprbs.cn
http://www.dtcms.com/wzjs/735905.html

相关文章:

  • 建筑网站哪里找linux wordpress 安装
  • 东莞网站优化案例做logo设计网站
  • 网站上线的步骤网站建设结构方案
  • 广西建设领域证书查询官方网站wordpress添加 logo
  • 江苏盐城网站开发网站栏目规划图
  • 雏鸟短视频app软件下载网站网站中怎么做网站统计
  • 网站需求设计文档wordpress google ajax
  • wordpress建自己的网站wordpress文章后面评论
  • 网页和网站的关系做外贸一般用哪些网站好
  • 网站开发视频播放网站wordpress缩略图不显示图片
  • 广州做网站信科分公司新浪博客 搬家 wordpress 工具
  • 仿xss网站搭建徐州手机网站制作公司哪家好
  • 优服优科网站建设公司微信免费下载2023新版
  • 网站开发业务方向架构文档wordpress 物流主题
  • 做网站的风险陕西专业做网站
  • 东莞搭建网站要多少钱东莞长安网站建设
  • 北京网站备案代理wordpress企业中文模板
  • 小说网站制作丹东网站网站建设
  • 网站站长英文网站开发 性能方面
  • 花瓣设计网站官网入口昆明网站建设企业
  • 做网站一个程序员够吗毕业设计实在不会怎么办
  • 山西网站开发如何把网站主关键词做到百度首页
  • 网站会员功能介绍海安网站建设
  • 网站想换空间影视广告创意拍摄
  • 网站搭建设计课程报告天津怎么建立企业网站
  • 做网站好还是阿里巴巴好网页定制哪家不错
  • 九州建网站素材网站下载
  • 如何使用记事本做网站网页前端框架
  • 微信网站设计最好的建设网站
  • 九江市住房和城乡建设厅网站化妆品网站设计方案