佇列是遵循fifo(先進先出)原則的一組有序的項。佇列在尾部新增新元素,並從頂部移除元素。最新新增的元素必須排在佇列的末尾。
在具體應用中通常用鍊錶或者陣列來實現。
佇列的操作其實是和棧是差不多的,但是佇列只允許新資料在後端進行新增。
1 建立佇列
宣告乙個類
function queue()
需要乙個用於儲存佇列中的元素的資料結構,這裡選擇陣列。
var items = ;
2 佇列的基本操作
this.enqueue = function (element)
this.dequeue = function()
this.front = function()
this.isempty = function()
this.size = function()
佇列和棧的區別是1.初始化類,驗證是否為空dequeue()
方法和front()
方法,這是因為先進先出和後進先出的原則不同。
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 這裡需要...