<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//基于数组实现列
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(){
var resultString = ''
for(var i=0;i<this.items.length;i++){
resultString+=this.items[i]+''
}
return resultString
}
// 方法
}
var queue = new Queue()
// 将元素加入到队列中
queue.enqueue('abc')
queue.enqueue('111')
alert(queue)
queue.dequeue()
alert(queue)
// 验证其他方法
alert(queue.isEmpty())
alert(queue.size())
</script>
</body>
</html>
击鼓传花的实现方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//基于数组实现列
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(){
var resultString = ''
for(var i=0;i<this.items.length;i++){
resultString+=this.items[i]+''
}
return resultString
}
// 方法
}
var queue = new Queue()
// 将元素加入到队列中
queue.enqueue('abc')
queue.enqueue('111')
alert(queue)
queue.dequeue()
alert(queue)
// 验证其他方法
alert(queue.isEmpty())
alert(queue.size())
// 击鼓传花
function passGame(nameList,num){
// 创建队列结构
var queue = new Queue()
for(var i=0;i<nameList.length;i++){
queue.enqueue(nameList[i])
}
//开始数数字,
// 不是num的时候,重新加入到队列的末尾
// 是num这个数字的时候,将其从队列中删除
// Num数字之前的人重新放到队列的末尾
while(queue.size()>1){
for(var i=0;i<num-1;i++){
queue.enqueue(queue.dequeue())
}
//num对应的这个人,直接从队列中删除
dequeue.dequeue()
}
}
</script>
</body>
</html>
优先队列
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>优先队列</title>
</head>
<body>
<script>
// 封装优先级队列
function PriorityQueue(){
PriorityQueue.prototype.enqueue = function(element){
this.items.push(element)
}
// 2.从队列中删除前端元素
PriorityQueue.prototype.dequeue = function(){
return this.items.shift()
}
// 3.查看前端元素
PriorityQueue.prototype.front = function(){
return this.items[0]
}
// 4.查看队列是否为空
PriorityQueue.prototype.isEmpty = function(){
return this.items.length == 0
}
// 5.查看队列中元素的个数
PriorityQueue.prototype.size = function(){
return this.items.length
}
// 6.toString方法
PriorityQueue.prototype.toString = function(){
var resultString = ''
for(var i=0;i<this.items.length;i++){
resultString+=this.items[i]+''
}
return resultString
}
//封装属性
function QueueElement(element,priority){
this.element = element
this.priority = priority //数据的优先级
}
//封装属性
this.items = []
PriorityQueue.prototype.enqueue = function(element,priority){
//创建QueueElement
var queueElement = new QueueElement(element,priority)
// 判断队列是否为空
if(this.items.length==0){
this.items.push(queueElement)
}else{
var added = false
for(var i=0;i<this.items.length;i++){
if(queueElement.priority<this.items[i]){
self.items.splice(i,0,queueElement)
added = true
break
}
}
if(!added){
this.items.push(queueElement)
}
}
}
}
//测试代码
var pq = new PriorityQueue()
pq.enqueue('abc',111)
pq.enqueue('cnb',11)
pq.enqueue('nbc',123)
pq.enqueue('vbn',9)
console.log('pq',pq)
alert('pq',pq)
</script>
</body>
</html>