資料結構(佇列實現篇)

2021-09-24 06:35:31 字數 3390 閱讀 9765

在資料結構與演算法中,佇列queue是一種受限的線性儲存結構,特殊之處在於它只允許在表的前端front進行刪除操作,而在表的後端rear進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。遵循先進先出fifo的規則。

佇列結構示意圖

佇列結構使用

生活中很多地方使用到佇列,例如醫院門診看病就是按**的號數來排隊就診;公司裡面的印表機是按檔案傳送的順序進行列印。

在程式設計中,佇列常用作訊息傳送。例如訊息傳送佇列。待傳送的訊息依次入佇列,待乙個訊息出佇列傳送完畢,才會進行下乙個訊息出佇列進行傳送。

實現普通佇列結構的功能

進佇列與出佇列流程

es6 佇列結構**

class queue

size

() isempty

() peek

() bottom

() push(element)

shift

() clear

() tostring

());

return result;}}

複製**

es5 佇列結構**

通過es5把功能函式可以繫結在物件的例項上,也可以把功能函式加在函式的原型鏈上

function

queue

() queue.prototype.push = function(element)

queue.prototype.shift = function

() queue.prototype.clear = function

() // 返回隊頭元素

queue.prototype.peek = function

() queue.prototype.size = function

() queue.prototype.isempty = function

() queue.prototype.bottom = function

() queue.prototype.tostring = function

() return result;

}複製**

實現優先佇列結構的功能
上面實現的是普通佇列情況,在日常生活中總遇到需要緊急處理的情況,例如銀行vip客戶,急診室危急病人,緊急檔案。這時候需要優先處理這種情況。

優先佇列和普通佇列的不同主要在優先佇列的每乙個元素都具有乙個權值,代表該元素的優先權大小。還有就是根據權值大小插入佇列之中。

es6 最大優先佇列結構**

class node 

}class queue

size

() isempty

() peek

() bottom

() //插入佇列

//當隊列為空時

if (!this.lists.length) else

}this.lists.push(node);}}

shift

() clear

() tostring

() );

return result;}}

const q = new queue();

console.log(json.stringify(q));

複製**

es5 最大優先佇列結構**

通過es5把功能函式可以繫結在物件的例項上,也可以把功能函式加在函式的原型鏈上

function node(element,prority)

function

queue

() //當隊列為空時

if(this.lists.length == 0)

for(var i=0;iif(node.prority > this.lists[i]["prority"])

}this.lists.push(node);

}queue.prototype.shift = function

() queue.prototype.clear = function

() // 返回隊頭元素

queue.prototype.peek = function

() queue.prototype.size = function

() queue.prototype.isempty = function

() queue.prototype.bottom = function

() queue.prototype.tostring = function

() return result;

}複製**

迴圈佇列結構圖

迴圈佇列就是把隊頭元素出佇列後,再入佇列。擊鼓傳花就是用到了迴圈佇列的原理

迴圈佇列**

迴圈佇列主要實現**如下

class sqqueue 

enqueue(item)

this.queue[this.last] = item

this.size++

this.last = (this.last + 1) % this.queue.length

} dequeue

() let r = this.queue[this.first]

this.queue[this.first] = null

this.first = (this.first + 1) % this.queue.length

this.size--

// 判斷當前佇列大小是否過小

// 為了保證不浪費空間,在佇列空間等於總長度四分之一時

// 且不為 2 時縮小總長度為當前的一半

if (this.size === this.getlength() / 4 && this.getlength() / 2 !== 0)

return r

} getheader

() return this.queue[this.first]

} getlength

() isempty

() resize(length)

this.queue = q

this.first = 0

this.last = this.size }}

複製**

終於水完這篇資料結構佇列

資料結構之佇列篇

關於佇列 實現佇列 佇列的操作 實現佇列介面 佇列介面 author wbkearly param 佇列中元素型別 public inte ce queue 基於array 之前部落格中定義的array類 實現佇列 arrayqueue 基於array實現的佇列 author wbkearly pa...

C 資料結構篇(佇列類)

在實現堆疊類之後,我們來實現佇列類,其實佇列也是鍊錶的擴充套件,它其實是一種特殊的鍊錶,如堆疊一樣,它和堆疊的不同在於,堆疊採用的是先進後出原則,而對列採用的是先進先出原則。什麼是先進後出呢?在日常生活中也到處可見它,比如 買火車票,大家都要排隊,先來的先買票,後來的在後面排隊,在隊伍中隨便插入是不...

資料結構 Java實現佇列

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 head 進行刪除操作,而在表的後端 tail 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入...