摘要:最近一直在學(xué)習(xí)圖數(shù)據(jù)結(jié)構(gòu),但是他用實現(xiàn)需要用到字典,遍歷的時候又需要用到棧,所以接下來我先把原來學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)所記的筆記整理出來隊列基本知識隊列和我們?nèi)粘I钪械呐抨犚粯樱裱氖窃瓌t,及的原則操作隊列的方法有向尾部插入元素方法完成進隊刪除頭
最近一直在學(xué)習(xí)圖數(shù)據(jù)結(jié)構(gòu),但是他用js實現(xiàn)需要用到字典,遍歷的時候又需要用到棧,所以接下來我先把原來學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)所記的筆記整理出來
隊列基本知識隊列:和我們?nèi)粘I钪械呐抨犚粯樱裱氖荈IFO原則,及first in first out的原則
操作隊列的方法有:
向尾部插入元素 enqueue()方法完成進隊
刪除頭部的元素 dequeue()方法完成出隊
返回隊列中的第一個元素 front()方法 及最先進入隊列和最先出隊列的元素
還有一些用于查詢的方法:
判斷一個隊列是否為空 isEmpty()方法 如果為空就返回true 如果不為空就返回false
返回數(shù)組的容量 size()方法
將一個數(shù)組打印出來 print()方法
接下來,我們將實現(xiàn)隊列這個類,首先,定義一個隊列的類,類中有一個私有數(shù)組,存放著我們需要的元素:
let Queue = function(){ let items = []; }
接下來,我們來定義隊列類的公共方法
//首先創(chuàng)建一個隊列的類 let Queue = function(){ let items = []; //在數(shù)組末尾添加元素 this.enqueue = function(e){ items.push(e); } //刪除最開頭,也是最先添加的元素 this.dequeue = function(e){ return items.shift(); } //讀取隊列中的最先被添加 最先被刪除的元素 this.front = function(){ return items[0]; } //判斷數(shù)組是否為空,如果為空就返回true 反之 就返回false this.isEmpty = function(){ return items.length == 0; } //返回數(shù)組的容量 this.size = function(){ return items.length; } //打印數(shù)組 this.print = function(){ console.log(items.toString()); } }優(yōu)先隊列
就像現(xiàn)實生活中的訂購特等艙的顧客先上機,訂購經(jīng)濟艙的顧客后上機一樣,優(yōu)先隊列就是對權(quán)重較大的元素(用1表示權(quán)重最大)優(yōu)先進行操作,我們有兩種實現(xiàn)方法:
將不同的元素設(shè)置優(yōu)先級,根據(jù)優(yōu)先及將元素添加到數(shù)組的正確位置,修改的是enqueue方法
用入列操作添加元素以后,按照元素的優(yōu)先級執(zhí)行出列,修改的是dequeue方法
我們將用第一種方法進行實現(xiàn)(如果用第二種的話用字典會更加合適一些),其他方法都不變,我們只對enqueue方法進行修改
//首先創(chuàng)建一個隊列的類 var Queue = function(){ var items = []; function QueueElements(element,priority){ this.element = element; this.priority = priority; return this; } //在數(shù)組末尾添加元素 this.equeue = function(element,priority){ var item = new QueueElements(element,priority); if(this.isEmpty()){ items.push(item); }else{ var added = false; for(let i=0;i函數(shù)解釋:這里的equeue方法 和 以往的 equeue方法區(qū)別就是,添加的元素是一個帶有優(yōu)先級屬性的元素(QueueElements類new出來的一個對象),在添加之前先判斷數(shù)組的是否為空,如果為空就直接插入,如果不為空就對優(yōu)先級進行比較,只要找到比他大的就將該元素插入,將added設(shè)置為true,如果沒有找到比他還大的,那么added依然是false,這時就將元素push到數(shù)組的最后
擊鼓傳花模擬基本思想就是:如果沒有輪到這個元素,就把該元素從頭部刪除添加到隊列的末尾,如果傳到了,就將該元素刪除,繼續(xù)循環(huán)剩下的元素
function hotPotato(namelist,num){ //創(chuàng)建一個新的隊列 let queue = new Queue(); //將所有元素加入姓名的列表 for(let i=0;i1){ let nameitem = ""; for(let i=0;i 函數(shù)解釋:游戲不停止的條件是隊列中元素的長度大于1,等于1時則擇出勝利者,循環(huán),當num不等于7時,就把末尾的移到隊列前面,循環(huán)完畢,num=7,刪除這個時候處在尾部的元素,繼續(xù)執(zhí)行上述操作,直至隊列中只剩一個元素
以上是隊列的全部內(nèi)容,還望各位同仁大神指點一二,我虛心接受
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81592.html
摘要:在隊列的這種數(shù)據(jù)結(jié)構(gòu)里面,新增的元素都在尾部,要移除的元素都在頂部。代碼實現(xiàn)下面用代碼來實現(xiàn)隊列這個數(shù)據(jù)結(jié)構(gòu),同樣都采用的語法,我們先定義一個類來表示隊列,然后在這個類的基礎(chǔ)上定義一下方法來模擬隊列的行為。 隊列和棧非常的類似,但是他們采用了不同的原則,棧采用的是后進先出,隊列正好相反,采用的是先進先出的原則。隊列的定義如下 隊列是遵循FIFO(先進先出)原則的有序集合,新添加的元素保...
摘要:前言數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。隊列和棧類似,也是一個遵循特殊規(guī)則約束的數(shù)據(jù)結(jié)構(gòu)。將沒有元素的隊列稱之為空隊,往隊列中插入元素的過程稱之為入隊,從隊列中移除元素的過程稱之為出隊。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本文介紹數(shù)據(jù)結(jié)構(gòu)中的隊列(queue)的概念、存儲結(jié)構(gòu)、隊列的特點...
摘要:而且目前大部分編程語言的高級應(yīng)用都會用到數(shù)據(jù)結(jié)構(gòu)與算法以及設(shè)計模式。隊列在尾部添加新元素,并從頂部移除元素。最新添加的元素必須排在隊列的末尾。 前言 JavaScript是當下最流行的編程語言之一,它可以做很多事情: 數(shù)據(jù)可視化(D3.js,Three.js,Chart.js); 移動端應(yīng)用(React Native,Weex,AppCan,Flutter,Hybrid App,小程...
閱讀 3698·2021-11-11 10:58
閱讀 2484·2021-09-22 15:43
閱讀 2873·2019-08-30 15:44
閱讀 2194·2019-08-30 13:08
閱讀 1824·2019-08-29 17:28
閱讀 890·2019-08-29 10:54
閱讀 678·2019-08-26 11:46
閱讀 3509·2019-08-26 11:43