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