佇列是一種先進先出的資料結構,佇列的主要操作是向佇列中插入新元素和刪除佇列中的元素,入隊操作在隊尾插入新元素,出隊操作刪除隊頭的元素。還有乙個重要操作是讀取隊頭的元素peek,底層的資料結構選用陣列,這裡通過使用js陣列物件中shift和push方法簡化**。佇列的建構函式如下:
function
queue
()
enqueue方法向隊尾新增乙個元素
function
enqueue
(element)
dequeue方法刪除隊頭的元素
function
dequeue
()
用如下方法讀取隊首和隊尾的元素
function
front
() function
back
()
tostring方法顯示佇列內元素
function
tostring
() return str;
}
empty判斷佇列是否為空
function
empty
()
使用佇列排序叫做基數排序,對於0-99的數字,將資料集掃瞄兩次,第一次按照個位數上的數字進行排序,第二次按十位上的數字進行排序。
function
distribute
(nums, queues, n, digit)
}function
collect
(queues, nums, n)
}}
在呼叫中,先建立10個佇列
var queues = ;
//陣列queues儲存十個用來排序的佇列
for(var i = 0; i < 10; i++)
//nums為要排序的陣列
var nums = [91, 46, 85, 15, 92, 35, 31, 22];
distribute(nums, queues, nums.length, 1);
collect(queues, nums, nums.length);
// nums = [91, 31, 92, 22, 85, 15, 35, 46];
distribute(nums, queues, nums.length, 10);
collect(queues, nums, nums.length);
//nums = [15, 22, 31, 35, 46, 85, 91, 92];
在一般情況下,在佇列中刪除的元素,一定是率先入隊的元素。但是有些使用佇列的應用,在刪除元素不想遵守這個約定,需要使用乙個叫做優先佇列的資料結構來模擬。這裡實現乙個簡單的靜態優先佇列,如果要使用動態的優先佇列可以參考我另一篇博文堆
從優先佇列中刪除元素時,需要考慮優先優先權的限制,比如銀行中排隊的vip使用者。
function
rank
()
現在重新定義dequeue方法,我們約定優先碼code值最小的元素優先順序最高
function
dequeue
() //splice方法直接改變陣列
return
this.datastore.splice(entry, 1);
}
在使用中,將棧的基本元素通過rank構造
var customer1 = new rank('john', 5);
var customer2 = new rank('merry', 1);
var queue = new queue();
queue.enqueue(customer1);
...
AcWing 模擬佇列 佇列 模擬
時 空限制 1s 64mb 實現乙個佇列,佇列初始為空,支援四種操作 1 push x 向隊尾插入乙個數x 2 pop 從隊頭彈出乙個數 3 empty 判斷佇列是否為空 4 query 查詢隊頭元素。現在要對佇列進行m個操作,其中的每個操作3和操作4都要輸出相應的結果。第一行包含整數m,表示操作次...
用棧模擬佇列和佇列模擬棧
棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...
c primer 佇列模擬
佇列是一種抽象的資料型別 adt 可以儲存有序的專案序列.新專案被新增到隊尾,並可以刪除隊首專案。佇列有點像堆疊,不過堆疊在同一端進行新增和刪除。這使得棧是一種先進後出 lifo 的結構,而佇列是先進先出的 fifo 從概念說說,佇列就好比是收款臺或者atm前面排的隊,所以對於上訴結構問題,佇列非常...