我對JS佇列的學習

2021-09-16 23:39:39 字數 2453 閱讀 9042

佇列是遵循fifo(先進先出)原則的一組有序的項。佇列在尾部新增新元素,並從頂部移除元素。最新新增的元素必須排在佇列的末尾。

在具體應用中通常用鍊錶或者陣列來實現。

佇列的操作其實是和棧是差不多的,但是佇列只允許新資料在後端進行新增。

1 建立佇列

宣告乙個類

function queue()
需要乙個用於儲存佇列中的元素的資料結構,這裡選擇陣列。

var items = ;
2 佇列的基本操作

this.enqueue = function (element)
this.dequeue = function()
this.front = function()
this.isempty = function()
this.size = function()
佇列和棧的區別是dequeue()方法和front()方法,這是因為先進先出和後進先出的原則不同。

1.初始化類,驗證是否為空

var queue = new queue();

console.log(queue.isempty()); //true;

2.新增到佇列,判斷長度

queue.enqueue("john");

queue.enqueue("jack");

queeu.enqueue("camila");

console.log(queue.size()); //3

3.移除兩個元素,判斷長度

queue.dequeue(); 

queue.dequeeu();

console.log(queue.size()); //1;這時佇列只剩下camila

對,這就是特權!比如登機,頭等艙商務艙能和經濟艙的登機順序一樣??肯定他們的優先順序高啊

實現乙個優先佇列,有兩種選項:①設定優先順序,然後在正確的位置新增元素。②用入列操作新增元素,然後按照優先順序移除它們。

就是登機,你可以讓優先順序高的先進去候車室,然後登機的時候按順序理所當然的頭等艙的先登機。另一種就是頭等艙經濟艙什麼的進去候車室的時候不按優先順序,但是呢,等到登機的時候按照優先順序喊人進去。

function priorityqueue() ;

this.queue = function(element, priority) else

}//到這一步就意味著所有的元素都比要新增的元素的優先順序低,所以直接放到末尾就可以

if(!added) }};

}

var priorityqueue = new priorityqueue();

priorityqueue.enqueue("john", 2);

priorityqueue.enqueue("jack", 1);

priorityqueue.enqueue("camila", 1);

得到的佇列就是 |jack(1)|camila(1)|john(2)|,優先順序相同只需要放到同優先順序的後面就可以。

這裡是最小優先佇列,優先值較小的元素被放置在佇列最前面。

擊鼓傳花,孩子們圍成乙個圓圈,把花盡快的傳遞給旁邊的人,某一時刻傳花停止,這個時候花在誰手裡誰就淘汰。重複這個過程直到只剩下乙個孩子。

function hotpotato(namelist, num) 

var eliminated = '';

//一輪遊戲淘汰乙個人

while(queue.size() > 1)

//一輪遊戲結束,淘汰手裡拿花的那個人,即隊首的那個

eliminated = queue.dequeue();

console.log(eliminated + "被淘汰");

}//得到最後的隊首

return queue.dequeue();

}var names = ["john", "jack", "camila", "ingrid", 'carl'];

var winner = hotpotato(names, 7);

console.log('勝利者' + winner);

結果:

camila jack carl ingrid依次被淘汰

勝利者:john

我對JS鍊錶的簡單學習

要儲存多個元素,陣列可能是最常用的資料結構。這種資料結構非常方便,但是有乙個缺點 從陣列的起點或者中間插入或移除項的成本非常高,因為需要移動元素 比如你插入乙個元素後面的所有的元素都移動了 位置 相比於陣列來說,鍊錶的好處在於新增或者刪除元素的時候不需要移動其他元素。但是操作鍊錶需要使用指標。陣列的...

我對JS的看法

很多人說js是後媽養的,它被生父拋棄了,所以它散漫不拘,各種奇葩 我倒覺得只是它的思考方式與常人不同罷了,就如同舞蹈,民族舞,交際舞等規規矩矩的按著節奏,噠噠噠,噠噠噠.體操,變化多,但也有規可循,轉體,跳躍,翻轉.而街舞,自由自在的,只要看著舒服,跳著也舒服就行,它可以很自由,可以很鬆散,或許有時...

我對棧的學習

這裡我們說的是資料結構中的棧,是一種先進後出的一種資料管理方式,打個比方就是我們把衣服整理好疊進櫃子,最先折的衣服都放在最下面,等我們要穿的時候就會拿起最上面的那個衣服穿。1.結構體定義 typedef struct link node typedef struct stack stack 這裡需要...