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版)
		数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ... 
随机推荐
- linux --> Linux 的启动流程
			Linux 的启动流程 操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但一旦进入操作系统,程序员几乎可以定制所有 ... 
- jdk自带的MD5进行数据的加密与解密
			package com.tools.util; import java.io.IOException; import java.io.UnsupportedEncodingException; imp ... 
- Linux运维人员共用root帐户权限审计(转至马哥Linux运维)
			一.应用场景 在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度.不出问题还好, 出了问题,就很难找出源头.这里介绍下,如何利用编译bash 使不同的客 ... 
- 【分布式系列之dubbo】dubbo管理工具dubbo-admin安装使用
			一.安装完成后界面显示 二.安装 1.下载dubbo-admin安装包 2.修改WEB-INF下的dubbo.properties文件内容 dubbo.registry.address=zookeep ... 
- C语言博客作业字符数组
			一.PTA实验作业 7-12 IP地址转换 本题PTA提交列表 设计思路 3.代码截图 7-7删除字符串中的子串 本题PTA提交列表 设计思路 定义字符型数组s[81]储存主串,sub[81]储存子串 ... 
- 【Alpha 阶段】后期测试及补充(第十一、十二周)
			[Alpha 阶段]动态成果展示 修复了一些bug后,关于游戏的一些动态图展示如下: 终极版需求规格说明书和代码规范 经过一些细微的图片和格式的调整,完成了本学期的最终版本: [markdown版说明 ... 
- 20162318 实验二《Java面向对象程序设计》实验报告
			北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623班 姓名:张泰毓 指导老师:娄老师.王老师 实验日期:2017年4月14日 实验密级:非密级 实验器材:带Lin ... 
- 团队作业2:需求分析&原型设计
			Deadline: 2017-11-5 22:00PM,以博客发表日期为准. 评分基准: 按时交 - 有分,检查的项目包括后文的三个方面 需求分析 原型设计 编码规范 晚交 - 0分 迟交两周以 ... 
- Beta集合
			Beta冲刺day1 Beta冲刺day2 Beta冲刺day3 Beta冲刺day4 Beta冲刺day5 Beta冲刺day6 Beta冲刺day7 测试总结 总结合集 Beta预备 
- iOS中滤镜种类及相关介绍
