队列是什么

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

栈是什么

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

游戏规则

星期天小哼和小哈约在一起玩桌游,他们正在玩一个非常古怪的扑克游戏——“小猫钓鱼”。游戏的规则是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。假如游戏开始时,小哼手中有 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. OSChina 周六乱弹 —— 胖点其实挺好
  2. Daily Scrum 11.16
  3. 牛客 - 阔力梯的树(树上启发式合并)
  4. 【asp.net Core MVC + angular6实战】 - 1. 环境搭建
  5. [刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)
  6. 案例:控制文件序列号满故障处理和分析
  7. 嵌入式数据库SQLite的编译、安装和使用[ZT]
  8. 实战Linux Bluetooth编程 (八) Class of Device
  9. linux nfs限制连接数,linux – 对NFS有一个有效的稳定性参数吗?
  10. 顺序输出一个整数的各位数字
  11. Ubuntu16.04安装Unity3d2019.2.6
  12. 黑苹果hidp显示不清楚_bigsur 黑苹果开启HIDPI失败解决方法
  13. C#+ AE实现地图注记功能
  14. 为了找工作学习ssm
  15. 地理信息系统名词解释大全(三)
  16. html5 canvas画椭圆形
  17. 微信支付快速生成签名sign
  18. JavaScript ES6 特性
  19. yolov5的anchors及bbox的编解码原理
  20. 中国战队Newbee夺DOTA2世界冠军

热门文章

  1. 伯克利大学sawyer机器人环境配置
  2. linux pcm和alsa 区别,linux alsa pcm(此pcm非硬件pcm接口)
  3. 让所有美术生头疼的素描静物,快看你画过没?
  4. alu和mdr位数相等吗_计算机组成原理复习
  5. Hbase学习之——协处理Coprocessor的使用
  6. java调用扫描仪1
  7. 灰度图像的中值滤波取证
  8. 视频去水印步骤-视频去水印软件下载
  9. 本地yum源报 无法打开*.sqlite.bz2
  10. everything搜到不到文件的设置问题