js数据结构之栈、队列(数据结构与拉火车游戏)
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数据结构之栈、队列(数据结构与拉火车游戏)的更多相关文章
- 【图解数据结构】 栈&队列
[TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包 ...
- Python数据结构:栈 队列
栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有 ...
- PHP数据结构:栈、队列、堆、固定数组
数据结构:栈 队列: 堆: 固定尺寸的数组:
- csu 1898: 复盘拉火车
1898: 复盘拉火车 Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 114 ...
- JS数据结构的栈和队列操作
数据结构:列表.栈.队列.链表.字典.散列.图和二叉查找树! 排序算法:冒牌.选择.插入.希尔.归并和快速! 查找算法:顺序查找和二分查找 在平时工作中,对数组的操作很是平常,它提供了很多方法使用,比 ...
- 学习javascript数据结构(一)——栈和队列
前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
- python数据结构之栈与队列
python数据结构之栈与队列 用list实现堆栈stack 堆栈:后进先出 如何进?用append 如何出?用pop() >>> >>> stack = [3, ...
- 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
随机推荐
- sqlite语句主页
因为现在android手机用sqlite数据,但是sql语句很多和sqlserver不同..所以还是把官网记下以便开发:http://www.sqlite.org/lang.html
- JavaOOP-继承
继承 1.继承的概念 继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法和属性的过程.如果类B继承于类A,那么B ...
- 强烈推荐!!!Fiddler抓取https设置详解(图文)
很多实用fiddler抓包,对于http来说不需太多纠结,随便设置下就能用,但是抓取https就死活抓不了, 诸如以下问题: creation of the root certificate was ...
- openjudge(二)
强制类型转换的作用:按照规范输出.
- 四则运算程序(java基于控制台)
四则运算题目生成程序(基于控制台) 一.题目描述: 1. 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 -o Exercise.txt 将生成10个题目. 2. 使用 -r ...
- hibernate框架学习笔记9:多对多关系案例
员工与角色案例: 一个员工可以是多种角色(总监,经理),一种角色可以是多个员工(保洁) 这里发现无法使用外键表达关系,多对多总是创建第三张表来维护关系 这张表至少两列,都是外键,分别引用两张表的主键 ...
- 2017年秋软工-领跑衫获奖感言&我最感谢的人
啥都不说,先上幅图.获得领跑衫,开心. 一.回忆 这是我第二次来上恩师杨的软件工程,第一次是2016年春,那时候我还是本科三年级的学生.忘了第一次为啥去蹭课,印象中是我的榜样亮哥把我给忽悠过去的?我也 ...
- HDFS之HA机制
- alpha-咸鱼冲刺day1-紫仪
总汇链接 一,合照 emmmmm.自然是没有的. 二,项目燃尽图 三,项目进展 登陆界面随意写了一下.(明天用来做测试的) 把学姐给我的模板改成了自家的个人主页界面,侧边栏啥的都弄出来了(快撒花花 ...
- Python split()方法
Python split()方法 描述 Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串 语法 split()方法语法: str.sp ...