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版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
随机推荐
- 【Flask】 使用Flask-Moment进行日期时间的管理
Flask-Moment Flask-Moment又是一个flask的扩展模块,用来处理时间日期等信息.用这个模块主要是考虑到两点,第一是为了让不同时区的用户看到的都是各自时区的实际时间,而不是服务器 ...
- 常用七大经典排序算法总结(C语言描述)
简介 其中排序算法总结如下: 一.交换排序 交换排序的基本思想都为通过比较两个数的大小,当满足某些条件时对它进行交换从而达到排序的目的. 1.冒泡排序 基本思想:比较相邻的两个数,如果前者比后者大,则 ...
- mysql新手入门随笔2
17.创建表 CREATE TABLE tbname(columnname1 类型 约束条件, columnname2 类型 约束条件,-); 三大类型:数值型,时间日期型,字符串类型 六大约束条件: ...
- 使用 win10 的正确姿势 (第二版)
文章为本人原创,转载请注明出处,谢谢. 17年9月初,写了第一篇<使用 win10 的正确姿势>,而现在半年多过去,文章更新了一些,主要是桌面的变化. 一. 重新定义桌面 我的桌面: 将桌 ...
- 网络1711班 C语言第八次作业批改总结
网络1711班 C语言第七次作业批改总结 最近在忙一些琐事,没能及时批改大家的作业,连续两次作业总结也没有很用心写,在这要给大家say sorry. 1.本次作业评分细则 1.1 基本要求(1分) 按 ...
- 实验四 Android程序设计 实验报告
实验四 Android程序设计 实验报告 目录 代码托管地址 Android程序设计-1 Android程序设计-2 Android程序设计-3 Android程序设计-4 Android程序设计-5 ...
- Java暑期作业
一.假期观影笔记--<熔炉> 影片<熔炉>是根据发生在韩国光州聋哑学校里的真实事件而改编.影片讲述的是在一所聋哑儿童学校里,校长.教务以及老师披着慈善的华丽外衣对学校中的多名未 ...
- 设计模式NO.1
设计模式NO.1 根据作业要求完成下列题目: 题目1: (1)要求:某系统日志记录器要求支持多种日志记录方式,如文件记录.数据库记录等:用户可以根据要求动态选择日志记录方式.使用Factory模式来设 ...
- android 框架LoonAndroid,码农偷懒专用
介绍 http://www.eoeandroid.com/thread-324764-1-1.html 架构培训视频: http://pan.baidu.com/s/1mgv8HTm 简介:下载 ht ...
- 201421123042 《Java程序设计》第12周
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...