1.js实现队列的数据结构(先进先出)

function Queue (array) {
if(Object.prototype.toString.call(array)!="[object Array]") {
throw "target is not an Array !"
} this.queue = array; this.pushQueue = function (ele) {
this.queue.push(ele)
}
this.delQueue = function () {
this.queue.shift()
}
this.getFirst = function () {
return this.queue[0]
}
this.getLast = function () {
return this.queue[this.queue.length]
}
this.isEmpty = function () {
return this.queue.length?false:true
}
this.getArray = function () {
return this.queue
}
// 出队列并获取出队列的元素
this.delGet = function () {
var last = this.getFirst();
this.delQueue();
return last;
}
}

2. js实现栈(先进后出)

function Stack (array) {
if(Object.prototype.toString.call(array)!="[object Array]") throw "target is not an Array !" this.stack = array; this.addStack = function (ele) {
this.stack.push(ele)
} this.delStack = function () {
this.stack.pop();
}
// 出栈并获取出栈的元素
this.delGet = function () {
var last = this.getLast();
this.delStack();
return last;
} this.getFirst = function () {
return this.stack[0]
} this.getLast = function () {
return this.stack[this.stack.length-1]
} this.getArray = function () {
return this.stack
}
}

***** 实现拉火车游戏

游戏约定如下:

1.首先给定相同数量的牌

2. 不同玩家轮流出牌

3.当出牌后,两张最近的相同牌之间的所有牌可以被当前玩家获取,获取后放在尾部

4.先出完牌的玩家输

*****定义玩家类

// name: 玩家名字  queue:队列数据结构   playGround:游戏台,用于存放玩家出的牌
function dragTrainPlayer (name, queue, playGround) {
if(Object.prototype.toString.call(array) !== "[object Array]") throw "target is not an Array !"
this.name = name;
this.cards = queue; this.getName = function () {
return this.name
} this.getArray = function () {
return this.cards.getArray();
}
// 每次出牌需检查一次
this.giveCard = function () {
if(this.cards.getArray().length==0) return 0
playGround.push(this.cards.delGet())
this.check() }
// 检查是否可获取牌
this.check = function () {
// 依次比对,最近相同牌之间的牌截取下来,与玩家当前手中的牌拼接
for (var i=playGround-1; i>0; i--) {
if(playGround[playGround.length-1] === playGround[i]) {
this.cards.getArray().concat(this.cards.slice(i))
return }
}
}
}

******* 定义游戏开始函数

function gameStart (player) {
var flag = 1;
// 如果没有出现玩家手中无牌的情况,则一直执行下去
while (flag) { for(var i = 0; i<arguments.length; i++) {
if(arguments[i].getArray().length === 0) {
flag = 0;
// 返回第一个出完牌的玩家的名字
return arguments[i].getName();
}
arguments[i].giveCard(); // 以下代码块用于每次出牌的测试
console.log("---------");
for(var i=0;i<arguments.length; i++) {
console.log(arguments[i].getName());
console.log(arguments[i].getArray());
console.log(playGround);
};
console.log("---------");
}
}
}

*******创建对象并执行

var playGround = [];
var stack1 = new Queue([5,8,6,9,8]);
var stack2 = new Queue([9,9,6,5,3]);
var stack3 = new Queue([7,4,2,5,1]); var player1 = new dragTrainPlayer("player1", stack1, playGround)
var player2 = new dragTrainPlayer("player2", stack2, playGround)
var player3 = new dragTrainPlayer("player3", stack2, playGround) console.log(gameStart(player1, player2, player3))

js数据结构之栈、队列(数据结构与拉火车游戏)的更多相关文章

  1. 【图解数据结构】 栈&队列

    [TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...

  2. Python数据结构:栈 队列

    栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有 ...

  3. PHP数据结构:栈、队列、堆、固定数组

    数据结构:栈 队列: 堆: 固定尺寸的数组:

  4. csu 1898: 复盘拉火车

    1898: 复盘拉火车 Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 114    ...

  5. JS数据结构的栈和队列操作

    数据结构:列表.栈.队列.链表.字典.散列.图和二叉查找树! 排序算法:冒牌.选择.插入.希尔.归并和快速! 查找算法:顺序查找和二分查找 在平时工作中,对数组的操作很是平常,它提供了很多方法使用,比 ...

  6. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  7. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

  8. python数据结构之栈与队列

    python数据结构之栈与队列 用list实现堆栈stack 堆栈:后进先出 如何进?用append 如何出?用pop() >>> >>> stack = [3, ...

  9. 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)

    数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...

随机推荐

  1. 教你怎么样在大陆直接使用google搜索

    一.环境准备 我们需要一个nginx的模块来进行设置,ngx_http_google_filter_module.前提我们是有一个海外的VPS,并且可以访问谷歌,我的VPS是亿速云香港的. 首先先感受 ...

  2. Oracle 12c(12.1.0.5) oem agent silent install(静默安装agent)

    注释: 文章自oracle support 文档 ID 1360083.1,静默安装agent采用的是把OMS服务端(即oem server端)的agent用压缩包download,远程传到agent ...

  3. 云计算 --> 三种服务模式IaaS,PaaS,SaaS

    三种服务模式IaaS,PaaS,SaaS “云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务.任何一个使用基于互联网的方法来计算,存储和开 ...

  4. runtime.getruntime.availableprocessors

    1:获取cpu核心数: Runtime.getRuntime().availableProcessors(); 创建线程池: Executors.newFixedThreadPool(nThreads ...

  5. Python中的threadlocal

    在多线程中,对于共有的共享数据的操作,需要加锁. 但是,对于局部变量,则在每个线程之间相互独立. 假如线程T想要把函数F1中的局部变量V1传到函数F2中去,F2再想把这个变量传到F3中去,一层一层地传 ...

  6. (译文)开始学习Webpack-应用TypeScript,配置热加载和Source Map

    项目初始化:采用TypeScript 我们的版本是: $ node --version v8.5.0 $ npm --version 5.5.1 npm版本升级了,因为npm最近带来了新特性,本地会生 ...

  7. Beta 集合

    Beta冲刺序列: Beta凡事预则立 :Beta No.0 Beta冲刺Day1:Beta No.1 Beta冲刺Day2:Beta No.2 Beta冲刺Day3:Beta No.3 Beta冲刺 ...

  8. Alpha第五天

    Alpha第五天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  9. android之SVG制作与应用

    文章解析及例子:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0825/3362.html 工具:Photoshop CC+sv ...

  10. SQL的介绍及MySQL的安装

    基础篇 - SQL 介绍及 MySQL 安装               SQL的介绍及MySQL的安装 课程介绍 本课程为实验楼提供的 MySQL 实验教程,所有的步骤都在实验楼在线实验环境中完成, ...