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