取号机排队取号服务问题

假设某天的取号机最多能取出15个号。

一共有2个服务窗口。

要求用代码模拟出:

1)客户用取号机领取服务编号。

2)模拟服务窗口的职员服务取到号的客户。

情景示意图

Golang 代码

/*数据结构队列题目一:1)创建一个数组模拟队列,每隔一定时间[随机],给数组添加一个数。2)启动两个协程,每隔一定时间(时间随机)到队列取出数据3)在控制台输出x 号协程 服务 ---》x 号客户x 号协程 服务 ---》x 号客户x 号协程 服务 ---》x 号客户4)使用锁机制即可
*/
package mainimport ("errors""fmt""math/rand""sync""time"
)type Queue struct {maxSize intqueue   [15]intfront   intrear    int
}// 声明一个全局互斥锁
var lock sync.Mutex// 添加数据到队列
func (this *Queue) AddQueue(num int) (err error) {// 判断队列是否已满if this.rear == this.maxSize-1 {return errors.New("queue full")}this.rear++this.queue[this.rear] = numreturn}// 每隔一定的随机时间
// 添加数据到队列
func (this *Queue) AddQueueRandomTime() {num := 0randNum := 0// 设置随机源rand.Seed(time.Now().UnixNano())for {// 程序随机睡眠一段时间randNum = rand.Intn(5000)time.Sleep(time.Millisecond * time.Duration(randNum))num++// 往队列里添加数据this.AddQueue(num)if this.rear == this.maxSize-1 {break}}}// 出队列
func (this *Queue) GetQueue() (value int, err error) {// 先判断队列是否为空if this.rear == this.front {return -1, errors.New("queue empty")}this.front++value = this.queue[this.front]return value, err
}// 每隔随机一段时间
// 从队列中取出数据
func (this *Queue) GetQueueRandomTime(routineNum int) {// 设置随机源rand.Seed(time.Now().UnixNano())for {// 程序睡眠随机一段时间randNum := rand.Intn(5000)time.Sleep(time.Millisecond * time.Duration(randNum))// 锁住队列// 当某个协程访问完这个队列// 另一个协程才允许访问这个队列lock.Lock()num, err := this.GetQueue()lock.Unlock()if err != nil {fmt.Println("队列为空")} else {fmt.Printf("%d 号协程 服务 ---》%d 号客户\n", routineNum, num)}}}func main() {// 初始化队列queue := &Queue{maxSize: 15,front:   -1,rear:    -1,}// 开启往队列添加数据的协程go queue.AddQueueRandomTime()// 开启2个协程,往队列取出数据for i := 1; i <= 2; i++ {go queue.GetQueueRandomTime(i)}// 主线程进入睡眠// 防止程序直接结束time.Sleep(time.Second * 1000)}

执行结果

队列为空
队列为空
1 号协程 服务 ---》 1 号客户
队列为空
队列为空
队列为空
队列为空
1 号协程 服务 ---》 2 号客户
队列为空
2 号协程 服务 ---》 3 号客户
队列为空
2 号协程 服务 ---》 4 号客户
2 号协程 服务 ---》 5 号客户
队列为空
队列为空
队列为空
2 号协程 服务 ---》 6 号客户
队列为空
队列为空
队列为空
队列为空
2 号协程 服务 ---》 7 号客户
2 号协程 服务 ---》 8 号客户
队列为空
1 号协程 服务 ---》 9 号客户
队列为空
队列为空
队列为空
1 号协程 服务 ---》 10 号客户
队列为空
1 号协程 服务 ---》 11 号客户
队列为空
队列为空
队列为空
1 号协程 服务 ---》 12 号客户
队列为空
队列为空
队列为空
队列为空
2 号协程 服务 ---》 13 号客户
1 号协程 服务 ---》 14 号客户
队列为空
1 号协程 服务 ---》 15 号客户

取号机排队取号服务算法(数据结构 队列(Queue))相关推荐

  1. 做最好的-排队叫号系统;智能排队系统;排队叫号软件;排队管理系统;排队叫号机;取号机;取号机软件;排队软件;LED显示屏;LED大屏幕;LED条屏;触摸屏一体机;

    做最好的-排队叫号系统:智能排队系统:排队叫号软件:排队管理系统:排队叫号机:取号机:取号机软件:排队软件:LED显示屏:LED大屏幕:LED条屏:触摸屏一体机. 经过最新的测试和客户提出要求的结合, ...

  2. 看动画学算法之:队列queue

    文章目录 简介 队列的实现 队列的数组实现 队列的动态数组实现 队列的链表实现 队列的时间复杂度 简介 队列Queue是一个非常常见的数据结构,所谓队列就是先进先出的序列结构. 想象一下我们日常的排队 ...

  3. java数据结构与算法之(Queue)队列设计与实现

    [版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53375004 出自[zejian的博客] ...

  4. 北京小升初计算机编程特长生班,北京特长生小升初测试启动 家长凌晨排队取号 图...

    昨晨7点多,东直门中学门口参加特长生测试的学生和家长已排起长队.晨报记者 李木易/摄 昨天,北京市小升初特长生测试启动,在北京的各大名校门口都挤满了前来赶考的孩子及其家长.北京晨报记者从东城.海淀等区 ...

  5. 取本机IP地址和网卡号

    取本机IP地址和网卡号 界面如下,主要是使用Winsock的一些东东取机器名和IP地址,取网卡就麻烦些,需要发送Netbios命令,需要注意的是需要包含winsock2.h和nb30.h,并且要引入两 ...

  6. 微信公众号批量爬取——Java版

    最近需要爬取微信公众号的文章信息.在网上找了找发现微信公众号爬取的难点在于公众号文章链接在pc端是打不开的,要用微信的自带浏览器(拿到微信客户端补充的参数,才可以在其它平台打开),这就给爬虫程序造成很 ...

  7. 如何抓取微信公众号历史文章?使用订阅号实现微信公众号历史文章爬虫

        微信订阅号已经改版了,这篇文章已经过时了,不过可以提供还算有价值的参考.     微信公众号已经成为生活的一部分了,虽然里面有很多作者只是为了蹭热点,撩读者的 G 点,自己从中获得一些收益:但 ...

  8. 哔哩哔哩弹幕爬取以及BV与AV号之间的转换

    作为b站老粉丝,我有义务向新人科普bilibili的发展与纪年史,本人持中立态度,仅做记录工作. B站的API端口都是开放的,用一个很简单的调用命令就可以计算出BV号对应的AV号. B站的源码已经在G ...

  9. 4ye含泪用python爬取了自己的公众号粉丝数据

    4ye含泪用python爬取了自己的公众号粉丝数据 小伙伴们好呀,最近本来是在捣鼓Gateway的知识点的,结果被一件事情搞得心不在焉 哈哈哈哈,结果不得不先鸽下~ 搞完这件事情再继续哦!! ε=ε= ...

  10. 微信公众号文章爬取方法整理

    微信公众号文章爬取方法整理 1.用python爬取 http://blog.csdn.net/d1240673769/article/details/75907152 实现方法:通过微信提供的公众号文 ...

最新文章

  1. 使用JNA,让java调用原生代码
  2. Ubuntu14.04下安装eclipse
  3. 向Lucene增加中文分词功能
  4. 【团队管理】改造团队成员?
  5. Nuxt使用高德地图
  6. python字典怎么输出key_python如何调用字典的key
  7. Remark for Color-Spectrum Rendering
  8. 洛谷——P1025 数的划分
  9. 2022新版X站模板 二开苹果cms视频网站源码可封装app(学习教程)
  10. 心电信号去噪(part1)--心电信号简介
  11. 一款免费、炫酷的GUI:AWTK
  12. linux版flash下载工具,Linux系统下安装Flash浏览器插件的方法
  13. linux系统下查找应用,Linux系统find查找命令运用
  14. 图像处理——图像的增强技术
  15. TX2--Tegra架构介绍
  16. 蓄电池浮充电和均充电
  17. Jackson ImmunoResearch普通羊驼血清说明书
  18. Who owns my data(2019/4/16)
  19. System Generator从入门到放弃(一)-安装与使用
  20. 矿物质饲料补充剂的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 前端基础入门之css less
  2. python实践_机器学习:Python实践 (魏贞原) 高清pdf完整版[124MB]
  3. Bootstrap自定义图标
  4. 儿童讲堂 - 量词的解释
  5. 【科研分享】推荐系统SCI顶会及顶级期刊 更新于2022-07-13
  6. webbrowser1 脚本报错_webbrowser脚本错误的解决办法
  7. 计算机专业买笔记本电脑游戏本还是商务本好,购买笔记本电脑,游戏本真的是第一选择吗?...
  8. 普通音箱实现成为无线音箱
  9. 《软件工程》思维导图
  10. 【昭阳】开源第2弹 JXT