js中模擬佇列

2021-07-26 20:30:12 字數 2002 閱讀 2317

佇列是一種先進先出的資料結構,佇列的主要操作是向佇列中插入新元素和刪除佇列中的元素,入隊操作在隊尾插入新元素,出隊操作刪除隊頭的元素。還有乙個重要操作是讀取隊頭的元素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前面排的隊,所以對於上訴結構問題,佇列非常...