>  기사  >  웹 프론트엔드  >  JavaScript 데이터 구조의 우선순위 큐와 순환 큐

JavaScript 데이터 구조의 우선순위 큐와 순환 큐

黄舟
黄舟원래의
2017-10-28 09:23:521707검색

이 문서의 예에서는 JavaScript 데이터 구조의 우선순위 queueloopqueue를 설명합니다. 참조를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

우선 순위 대기열

우선 순위 대기열 구현: 우선 순위를 설정한 다음 올바른 위치에 요소를 추가하세요.

여기서 구현하는 것은 최소 우선순위 큐이며, 우선순위 값이 작은(높은 우선순위) 요소가 큐의 맨 앞에 배치됩니다.

//创建一个类来表示优先队列
function Priorityqueue(){
  var items=[];//保存队列里的元素
  function QueueEle(e,p){//元素节点,有两个属性
    this.element=e;//值
    this.priority=p;//优先级
  }
  this.enqueue=function(e,p){//添加一个元素到队列尾部
    var queueEle=new QueueEle(e,p);
    var added=false;
    //priority小的优先级高,优先级高的在队头
    if(this.isEmpty()){
      items.push(queueEle);
    }else{
      for(var i=0;i<items.length;i++){
        if(items[i].priority>queueEle.priority){
          items.splice(i,0,queueEle);
          added=true;
          break;
        }
      }
      if(!added){
        items.push(queueEle);
      }
    }
  }
  this.isEmpty=function(){
    return items.length==0;
  }
  this.dequeue=function(){
    return items.shift();
  }
  this.clear=function(){
    items=[];
  }
  this.print=function(){
    console.log(items);
  }
  this.mylength=function(){
    return items.length;
  }
}
var pqueue=new Priorityqueue();
pqueue.enqueue(&#39;a&#39;,2);
pqueue.enqueue(&#39;b&#39;,1);
pqueue.enqueue(&#39;c&#39;,2);
pqueue.enqueue(&#39;d&#39;,2);
pqueue.enqueue(&#39;e&#39;,1);
pqueue.print();
//[ QueueEle { element: &#39;b&#39;, priority: 1 },
// QueueEle { element: &#39;e&#39;, priority: 1 },
// QueueEle { element: &#39;a&#39;, priority: 2 },
// QueueEle { element: &#39;c&#39;, priority: 2 },
// QueueEle { element: &#39;d&#39;, priority: 2 } ]

실행 결과:

올바른 위치에 요소 추가: 대기열이 비어 있으면 요소를 직접 대기열에 추가할 수 있습니다. 그렇지 않으면 이 요소의 우선순위를 다른 요소와 비교해야 합니다. 추가할 요소보다 우선순위가 낮은 항목이 발견되면 새 요소가 그 앞에 삽입됩니다. 이러한 방식으로 우선순위가 동일하지만 대기열에 먼저 추가된 다른 요소에 대해서도 첫 번째 항목을 따릅니다. 선착순 원칙.

최대 우선순위 큐: 우선순위 값이 더 큰 요소가 큐의 맨 앞에 배치됩니다.

원형 대기열

은 북 연주와 꽃 전달 게임을 구현합니다.

//创建一个类来表示队列
function Queue(){
  var items=[];//保存队列里的元素
  this.enqueue=function(e){//添加一个元素到队列尾部
    items.push(e);
  }
  this.dequeue=function(){//移除队列的第一项,并返回
    return items.shift();
  }
  this.front=function(){//返回队列的第一项
    return items[0];
  }
  this.isEmpty=function(){//如果队列中部包含任何元素,返回true,否则返回false
    return items.length==0;
  }
  this.mylength=function(){//返回队列包含的元素个数
    return items.length;
  }
  this.clear=function(){//清除队列中的元素
    items=[];
  }
  this.print=function(){//打印队列中的元素
    console.log(items);
  }
}
//击鼓传花
function hotPotato(namelist,num){
  var queue=new Queue();
  for(var i=0;i<namelist.length;i++){
    queue.enqueue(namelist[i]);
  }
  var eliminated=&#39;&#39;;
  while(queue.mylength()>1){
    for(i=0;i<num;i++){
      queue.enqueue(queue.dequeue());
    }
    eliminated=queue.dequeue();
    console.log("淘汰"+eliminated);
  }
  return queue.dequeue();
}
var namelist=[&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;];
var winner=hotPotato(namelist,7);
console.log(winner+"获胜");
//淘汰c
//淘汰b
//淘汰e
//淘汰d
//a获胜

작업 결과:

목록을 가져와서 목록에 있는 모든 이름을 대기열에 추가하세요. 숫자가 주어지면 대기열이 반복됩니다. 대기열의 헤드에서 항목을 제거하고 대기열의 꼬리에 추가하여 순환 대기열을 시뮬레이션합니다. 패스 횟수가 일정 수에 도달하면 꽃을 받은 사람이 제거됩니다. 결국 한 사람만 남게 되면 그 사람이 승자가 됩니다.

위 내용은 JavaScript 데이터 구조의 우선순위 큐와 순환 큐의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.