>  기사  >  웹 프론트엔드  >  JavaScript 우선순위 큐 및 순환 큐 예시에 대한 자세한 설명

JavaScript 우선순위 큐 및 순환 큐 예시에 대한 자세한 설명

小云云
小云云원래의
2018-01-20 10:21:301640검색

이 글에서는 자바스크립트 데이터 구조의 우선순위 큐와 순환 큐를 주로 소개하며, 자바스크립트 데이터 구조에서 우선순위 큐와 순환 큐의 원리, 정의, 사용법을 필요한 친구들이 예시 형태로 자세히 분석합니다. 모두에게 도움이 되기를 바랍니다.

우선순위 대기열

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

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

//创建一个类来表示优先队列
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('a',2);
pqueue.enqueue('b',1);
pqueue.enqueue('c',2);
pqueue.enqueue('d',2);
pqueue.enqueue('e',1);
pqueue.print();
//[ QueueEle { element: 'b', priority: 1 },
// QueueEle { element: 'e', priority: 1 },
// QueueEle { element: 'a', priority: 2 },
// QueueEle { element: 'c', priority: 2 },
// QueueEle { element: 'd', 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=['a','b','c','d','e'];
var winner=hotPotato(namelist,7);
console.log(winner+"获胜");
//淘汰c
//淘汰b
//淘汰e
//淘汰d
//a获胜

작업 결과:

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

관련 권장사항:

JDK에서 우선순위 큐가 어떻게 구현되는지에 대한 자세한 설명

PHP 데이터 구조 큐(SplQueue) 및 우선순위 큐(SplPriorityQueue) 단순 사용 예제_PHP 튜토리얼

javascript에서 배열을 사용하여 구현됨 Circular 대기열 코드_자바스크립트 기술

위 내용은 JavaScript 우선순위 큐 및 순환 큐 예시에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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