js实现简单的队列,循环队列解决约瑟夫问题(击鼓传花)

事例演示地址:点这里

效果图:

一,基本队列

这是简单的队列的操作,

实现的功能:

  1,往队列添加元素(enqueue):队尾添加数据。

  2,出队列(outqueue):队头删除数据。

  3,队列中的数据(print)

  4,队列的指定index值(indexData):查询指定下标的队列中的值。

  5,查看队列是否为空(empty):返回值 false,true。

  6,查看队列的长度(sizes):

js代码:

function Queue(){

var items=[];

// 入栈

this.enqueue=function (element){

items.push(element);

}

// 出栈

this.outqueue=function () {

return items.shift();

}

// 打印队列

this.print =function (){

return items.toString()

}

// 队列的值

this.indexData=function(index){

return items[index]

}

// 队列是否为空

this.empty=function(){

return items.length==0

}

// 队列的长度

this.sizes=function(){

return items.length

}

}

// 初始化队列

var queue=new Queue ();

queue.enqueue('Hello');

queue.enqueue('Word');

queue.enqueue('!');

// 队列列表

function queuePrint (){

var dataPrint=queue.print();

document.getElementById('domo').innerHTML=dataPrint;

}

//添加队列

function addQueue(){

var data=document.getElementById('input').value;

queue.enqueue(data)

}

//出栈

function queueOut(){

var dataOut=queue.outqueue();

document.getElementById('out').innerHTML=dataOut;

}

//队列的index值

function queueSelect(){

var data=document.getElementById('select').value;

var dataSelect=queue.indexData(data);

document.getElementById('selectTag').innerHTML=dataSelect;

}

// 判断队列是否为空

function queueIsEmpty(){

var isEmpty=queue.empty();

var empty=isEmpty===true?'空队列':'非空队列';

document.getElementById('empty').innerHTML=empty;

}

// 队列长度

function queueSize(){

var data=queue.sizes();

document.getElementById('length').innerHTML=data;

}

二,循环队列

循环队列的步骤:

1,在forQueue(数据列表,循环的次数)传入两个参数。

2,在forQueue(nameList,num){

          1,声明queue=基本队列。

          2,使用for循环将nameList的数据添加到队列中。

          3,使用whlie判断队列的数据大于1个,就会进行循环,循环的次数就是传入的num,

在循环中,queue.addQueue(queue.outQueue()),将出列的值在入列。

         4,最终返回唯一一个队列的值

}

js代码:

//队列

function Queue(){

var items=[];

this. addQueue=function(element){

return items.push(element)

}

this.outQueue=function(){

return items.shift()

}

this.printQueue=function(){

return items.toString();

}

this.size=function(){

return items.length ;

}

}

//

function forQueue(nameList,num){

//初始化队列和淘汰者

losser=[];

var queue=new Queue();

// 将数据导入队列中

for(var i=0; i<nameList.length; i++){

queue.addQueue(nameList[i])

}

var outQueueData='';

// 当队列还存在值时,在循环中将出列的值在进行入列操作,循环结束将出列的淘汰者存在looser的数组中

while(queue.size()>1){

for(var i=0;i<num;i++){

queue.addQueue(queue.outQueue())

}

outQueueData=queue.outQueue();

console.log('失败者:'+outQueueData)

losser.push(outQueueData)

}

//返回最终队列的值

return queue.outQueue();

}

var nameList=['one','two','three','four','fine','six','server'];

var losser=[];

var num =0;

//list队列列表

function list(){

var queueList=nameList.toString();

document.getElementById('list').innerHTML=queueList;

}

//随机改变队列循环的次数

function changeNum(){

num=Math.floor(Math.random()*30);

console.log("m:"+num);

document.getElementById('num').innerHTML=num;

}

//开始

function begin(){

var winner=forQueue(nameList,num);

console.log("m:"+num);

console.log('胜利者:'+winner);

document.getElementById('winner').innerHTML=winner;

}

//looser列表

function looserPrint(){

var data=losser.toString();

document.getElementById('looser').innerHTML=data;

}

//添加n的数据

function addList(){

var data=document.getElementById('inputData').value;

nameList.push(data);

var queueList=nameList.toString();

document.getElementById('list').innerHTML=queueList;

}

事例的源码:点击这里

-------------------------------------------------------------------------------------------------------------------------------------------------------------------如遇到问题:+WX:WAZJ-0508,及时联系---------------------------------------------------------------------------------------------------------------------------------------------------

发布了58 篇原创文章 · 获赞 41 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/Zeng__Yi/article/details/84950101