队列是什么

存储数据的方式,先进先出、后进后出,例如排队买票

栈是什么

存储数据的方式,先进后出、后进先出,例如手枪上膛了,先打出得永远是最后上进去那发子弹

游戏规则

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。假如游戏开始时,小哼手中有 6 张牌,顺序为 2 4 1 2 5 6,小哈手中也有 6 张牌,顺序为 3 1 3 5 6 4,最终谁会获胜呢?现在你可以拿出纸牌来试一试。接下来请你写一个程序来自动判断谁将获胜。

思路

  1. 将两个人手上的牌想象成两个队列,打出来就是出队列,硬盘就是进队列
class Person {constructor(name, arr) {this.name = namethis.arr = arr}chu () {return this.arr.shift()}jin (arr) {for (let i = arr.length - 1; i >= 0; i--) {this.arr.push(arr[i])}console.log(`${this.name}赢牌了${arr}`);this.arr.concat(arr)}life () {if (this.arr.length) {console.log(`${this.name}手中的牌为${this.arr}`);return true}console.log(`${this.name}没牌了  游戏结束`);return false}
}const person1 = new Person('小恒', [2, 4, 1, 2, 5, 6])
const person2 = new Person('小哈', [3, 1, 3, 5, 6, 4])
  1. 将桌上已经出的牌当做一个栈
const arr = []
  1. 定义变量决定谁先出、回合数和获胜条件
let currentRound = 0let is1Chu = true
while (person1.life() && person2.life()) {//xxxx
}
  1. 模拟出两个人出牌的样子
while (person1.life() && person2.life()) {currentRound++const it = is1Chu ? person1.chu() : person2.chu()arr.push(it)const findIndex = arr.findIndex((item, index) => (item == it && index !== arr.length - 1))if (findIndex != -1) {const spliceArr = arr.splice(findIndex)is1Chu ? person1.jin(spliceArr) : person2.jin(spliceArr)}is1Chu = !is1Chu
}
  1. 游戏结束

完整实现代码

class Person {constructor(name, arr) {this.name = namethis.arr = arr}chu () {return this.arr.shift()}jin (arr) {for (let i = arr.length - 1; i >= 0; i--) {this.arr.push(arr[i])}console.log(`${this.name}赢牌了${arr}`);this.arr.concat(arr)}life () {if (this.arr.length) {console.log(`${this.name}手中的牌为${this.arr}`);return true}console.log(`${this.name}没牌了  游戏结束`);return false}
}const person1 = new Person('小恒', [2, 4, 1, 2, 5, 6])
const person2 = new Person('小哈', [3, 1, 3, 5, 6, 4])const arr = []
let currentRound = 0let is1Chu = truewhile (person1.life() && person2.life()) {currentRound++const it = is1Chu ? person1.chu() : person2.chu()arr.push(it)const findIndex = arr.findIndex((item, index) => (item == it && index !== arr.length - 1))if (findIndex != -1) {const spliceArr = arr.splice(findIndex)is1Chu ? person1.jin(spliceArr) : person2.jin(spliceArr)}is1Chu = !is1Chu
}console.log('进行了' + currentRound + '回合');

js算法之旅:用队列和栈计算出扑克玩:拖板车(小猫钓鱼) 游戏的结果相关推荐

  1. 数据结构与算法:链表,队列,栈,递归,有序表

    反转单链表,双链表 import java.util.ArrayList; import java.util.List;public class ReverseList {public static ...

  2. 数据结构与算法(3)-----队列和栈

    1. 栈和队列的基本性质 栈是先进后出;(像是子弹夹,后进先打出) 队列是先进先出;(像是平时排队买冰淇淋,按顺序轮流) 栈和队列在实现的结构上可以有数组和链表两种形式; (1)数组结构实现容易; ( ...

  3. JS 数据结构之旅 :通过JS实现栈、队列、二叉树、二分搜索树、AVL树、Trie树、并查集树、堆

    JS 数据结构之旅 栈 概念 栈是一个线性结构,在计算机中是一个相当常见的数据结构. 栈的特点是只能在某一端添加或删除数据,遵循先进后出的原则 实现 每种数据结构都可以用很多种方式来实现,其实可以把栈 ...

  4. JS算法探险之队列(Queue)

    ❝ 乔布斯经常说到一句话:"Stay hungry, Stay foolish" 「Stay hungry」:永不满足, 「Stay foolish」: 是说埋头做自己的事,不要理 ...

  5. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  6. 先进先出算法_结构与算法(02):队列和栈结构

    一.队列结构1.基础概念 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的 ...

  7. 数据结构与算法(六)-背包、栈和队列

    前言:许多基础数据类型都和对象的集合有关.具体来说,数据类型的值就是一组对象的集合,所有操作都是关于添加.删除或是访问集合中的对象.而且有很多高级数据结构都是以这样的结构为基石创造出来的,在本文中,我 ...

  8. 2.2基本算法之递归和自调用函数_数据结构与算法之5——队列和栈

    栈和队列比较简单,而且实用性非常广泛,这里主要介绍一下他们的概念和实现,在很多算法中,栈和队列的运用很重要,因此,虽然简单确是最重要的数据结构之一,必须重视. 栈是保证元素后进先出(后存入者先使用,L ...

  9. java使用队列实现栈思路_算法面试:队列实现栈的方案

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇介绍的是如何用两个队列实现栈的问题.这道题作为上一篇文章算法面试:栈实现队列 ...

最新文章

  1. 群晖服务器性能测试,原创首发!群晖J3455 G4560 I7 4770HQ功耗性能测试!
  2. CVPR 2021 Short-video Face Parsing Challenge 季军方案分享
  3. 操纵自如--页面内的配合与通信
  4. 走近NAP功能 全面了解Vista系统安全机制
  5. webstorm遇到的问题
  6. Linux系统编程(七)消息队列
  7. [Python]从哪里开始学习写代码(未完待续)
  8. Android常用Adapter用例(二)
  9. 5.abp框架code first方式删除表
  10. 光纤上网究竟是如何实现的?
  11. python十六进制转十进制_python实现进制转换(二、八、十六进制;十进制)
  12. 如何让excel图表根据当前月份自动延伸
  13. 实现百度地图marker平滑移动
  14. chemdraw怎么连接两个结构_用ChemDraw连接两个结构片段的教程
  15. HDU 6058 Kanade's sum 逆序求第k大
  16. golang 万年历的实现代码
  17. excel 批量翻译-excel 批量函数公司翻译大全免费
  18. Moving.............
  19. 消息认证码和单向散列函数
  20. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定

热门文章

  1. Sawyer_Physics_Simulator_Guidelines
  2. 有了Service Mesh,还需要API网关么?
  3. 业余草通告CSDN博客用户zhang__ao非法转载文章的公告
  4. C语言爱因斯坦的数学游戏,C语言实例 爱因斯坦的数学题
  5. Office EXCEL 如何将复制的一堆数据按空格断开
  6. 什么是特斯拉?他和爱迪生相爱相杀。
  7. 解密NFT区块链游戏和收藏品市场
  8. spring cloud系列一:Cloud Native Applications
  9. C/C++编程工具及实用小软件推荐_dvlinker的博客-CSDN博客_编写c++的软件
  10. java编程实现107653秒是几天几小时几分钟几秒