标签:开始 添加 数据结构与算法 函数 商务 而不是 func 参数 面试题
// 封装队列
function Queue() {
//属性
this.items = []
//方法
// 1.将元素加入到队列中
Queue.prototype.enqueue = function (element) {
this.items.push(element)
}
// 2.从队列中删除前端元素
Queue.prototype.dequeue = function () {
return this.items.shift()
}
// 3.查看前端元素
Queue.prototype.front = function () {
return this.items[0]
}
// 4.判断队列是否为空
Queue.prototype.isEmpty = function () {
return this.items.length == 0
}
// 5.获取队列中元素的个数
Queue.prototype.size = function () {
return this.items.length
}
// 6.toString方法
Queue.prototype.toString = function () {
//20 10 12 8 7
let resultString = ''
for (let i = 0; i < this.items.length; i++) {
resultString += this.items[i] + ''
}
return resultString
}
}
//使用队列
var queue = new Queue()
// 验证使用
queue.enqueue('abc')
queue.enqueue('cba')
queue.enqueue('nba')
queue.enqueue('mba')
alert(queue)
queue.dequeue()
alert(queue)
//....其他方法
//面试题,击鼓传花(使用了上面封装的队列类)
function passGame(namelist, num) {
//1.创建一个队列结构
var queue = new Queue
//2.所有人依此加入队列
for (let i = 0; i < namelist.length; i++) {
queue.enqueue(namelist[i])
}
//3.开始数数字
while (queue.size() > 1) {
//不是num的时候,重新加入到末尾,是num的时候,将其从队列中删除
//3.1 num数字之前的人,依此放到末尾去
for (let i = 0; i < num - 1; i++) {
//先删除前端元素,再添加到尾部
queue.enqueue(queue.dequeue())
}
//3.2 num对应的这个人,直接从队列中删除掉
//因为num对应的前面的人都放到后面去了,所以现在前端就是num对应的那个人
queue.dequeue()
}
//获取最终剩下的那个人
//获取最终剩下的那个人再原来的数组中是第一个位置
var endName = queue.front()
return (namelist.indexOf(endName)+1)+':'+endName
}
//测试击鼓传花
names =['lili','lucy','tom','lilei','hy']
console.log(passGame(names, 3))
实现优先级队列相对队列主要有两仿麦呢的考虑:
1.初步结构封装:
//封装优先级队列
function PrioritQueue(){
//在封装一个类
//类似java中的内部类,外部传入的两个数,但是内部对这两个数时有封装的
function QueueElement(element,priorit){
this.element = element
this.priorit = priorit
}
//封装属性
this.items = []
//实现插入方法
PrioritQueue.prototype.enqueue=function(element,priorit){
//1.先创建QueueElement对象
var queueElement = new QueueElement(element,priorit)
}
}
2.优先级队列数据结构实现:
//封装优先级队列
function PrioritQueue() {
//在封装一个类
//类似java中的内部类,外部传入的两个数,但是内部对这两个数时有封装的
function QueueElement(element, priorit) {
this.element = element
this.priorit = priorit
}
//封装属性
this.items = []
//实现插入方法
PrioritQueue.prototype.enqueue = function (element, priorit) {
//先创建QueueElement对象
var queueElement = new QueueElement(element, priorit)
//判断队列是否为空
if (this.items.length == 0) {
//如果为空,则能直接插入
this.items.push(queueElement)
} else {
let added = false
for (let i = 0; i < this.items.length; i++) {
if (queueElement.priorit < this.items[i].priorit) {
this.items.splice(i, 0, queueElement)
added = true
break
}
}
if (!added) {
this.items.push(queueElement)
}
}
}
//(插以外,其他的操作与普通队列相同)
// 2.从队列中删除前端元素
PrioritQueue.prototype.dequeue = function () {
return this.items.shift()
}
// 3.查看前端元素
PrioritQueue.prototype.front = function () {
return this.items[0]
}
// 4.判断队列是否为空
PrioritQueue.prototype.isEmpty = function () {
return this.items.length == 0
}
// 5.获取队列中元素的个数
PrioritQueue.prototype.size = function () {
return this.items.length
}
// 6.toString方法
PrioritQueue.prototype.toString = function () {
//20 10 12 8 7
let resultString = ''
for (let i = 0; i < this.items.length; i++) {
resultString += this.items[i].element + '-' +this.items[i].priorit+ ' '
}
return resultString
}
}
// 测试代码
var pq = new PrioritQueue()
//enqueue方法
pq.enqueue('abc',111)
pq.enqueue('cba',200)
pq.enqueue('nba',50)
pq.enqueue('nba',66)
console.log(pq)
标签:开始 添加 数据结构与算法 函数 商务 而不是 func 参数 面试题
原文地址:https://www.cnblogs.com/JCDXH/p/11908821.html