最近一直在學習圖資料結構,但是他用js實現需要用到字典,遍歷的時候又需要用到棧,所以接下來我先把原來學習資料結構所記的筆記整理出來
佇列:和我們日常生活中的排隊一樣,遵循的是fifo原則,及first in first out的原則
操作佇列的方法有:
向尾部插入元素 enqueue()方法完成進隊
刪除頭部的元素 dequeue()方法完成出隊
返回佇列中的第乙個元素 front()方法 及最先進入佇列和最先出佇列的元素
還有一些用於查詢的方法:
判斷乙個佇列是否為空 isempty()方法 如果為空就返回true 如果不為空就返回false
返回陣列的容量 size()方法
將乙個陣列列印出來 print()方法
接下來,我們將實現佇列這個類,首先,定義乙個佇列的類,類中有乙個私有陣列,存放著我們需要的元素:
let queue = function()
接下來,我們來定義佇列類的公共方法
//首先建立乙個佇列的類
let queue = function()
//刪除最開頭,也是最先新增的元素
this.dequeue = function(e)
//讀取佇列中的最先被新增 最先被刪除的元素
this.front = function()
//判斷陣列是否為空,如果為空就返回true 反之 就返回false
this.isempty = function()
//返回陣列的容量
this.size = function()
//列印陣列
this.print = function()
}
就像現實生活中的訂購特等艙的顧客先上機,訂購經濟艙的顧客後上機一樣,優先佇列就是對權重較大的元素(用1表示權重最大)優先進行操作,我們有兩種實現方法:
將不同的元素設定優先順序,根據優先及將元素新增到陣列的正確位置,修改的是enqueue方法
用入列操作新增元素以後,按照元素的優先順序執行出列,修改的是dequeue方法
我們將用第一種方法進行實現(如果用第二種的話用字典會更加合適一些),其他方法都不變,我們只對enqueue方法進行修改
//首先建立乙個佇列的類
var queue = function()
//在陣列末尾新增元素
this.equeue = function(element,priority)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,刪除這個時候處在尾部的元素,繼續執行上述操作,直至佇列中只剩乙個元素
以上是佇列的全部內容,還望各位同仁大神指點一二,我虛心接受
資料結構 佇列
一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...
資料結構 佇列
資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...
資料結構 佇列
code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...