C 中佇列的實現原理

2021-10-23 22:16:26 字數 2356 閱讀 1531

佇列介紹

佇列是一種先進先出的資料結構,它是一種線性表,允許在表的尾部插入元素,在其首部刪除元素。佇列是一種非常常見和重要的資料結構,排隊就是佇列在生活中的示例。

佇列有兩種實現方式,一種是用鍊錶實現佇列,還有一種是用順序表來實現佇列。

自定義一種鍊錶方式實現佇列

class

selfqueue

else

}public

void

dequeue

(out

tvalue

)else

}class

node

public

t item

public

node next

}}

1.在這裡定義了乙個節點類用於儲存當前元素和指向下乙個節點的位址

2.宣告乙個節點_front指向佇列首部,乙個節點_back指向佇列尾部

3.當建立乙個selfqueue例項且佇列中沒有元素,並使用enqueue方法插入時,會將_front和_back都指向乙個新的節點,如果有元素,那麼佇列尾部節點的next便會指向它,使用dequeue方法取出元素時,便會取出佇列首部的元素,佇列沒有元素則會引發異常。

往該佇列中加入0,1,2,3,4,最後取出來的仍然是0,1,2,3,4,由此可見,這個簡易的佇列是沒有問題的

順序表方式實現佇列

在c#中,其佇列queue就是由順序表實現的,下面展示部分源**

private t[

] _array;

private

int _head;

//佇列頭部索引

private

int _tail;

//佇列尾部索引

private

int _size;

//當前存入的元素數

private

int _version;

public

void

enqueue

(t item)

setcapacity

(num)

;//容量擴大兩倍,最少為4

} _array[_tail]

= item;

_tail =

(_tail +1)

% _array.length;

//插入元素後,佇列尾部索引加一取餘,實現對陣列的迴圈使用

_size++

; _version++;}

public

tdequeue()

t result = _array[_head]

; _array[_head]

=default

(t);

_head =

(_head +1)

% _array.length;

//取出元素後,佇列首部索引加一取餘,實現對陣列的迴圈使用

_size--

; _version++

;return result;

}private

void

setcapacity

(int capacity)

else

//將原陣列的頭部到末尾的部分複製到新陣列的開頭,將原陣列的0到尾部的部分複製到後面

//這樣新的陣列,頭部在第一位,尾仍然在後面

} _array = array;

_head =0;

_tail =

((_size != capacity)

? _size :0)

; _version++

;}

1.在c#中,其佇列使用了乙個陣列_array來儲存元素

2.使用_head和_tail來儲存首部和尾部的索引

3.當使用enqueue來插入元素時,若陣列長度和已儲存元素相等時,會呼叫setcapacity對陣列進行擴容,由於_head和_tail的存在,可以將陣列_array看做是乙個可以迴圈的陣列

4.當新加入資料又取出去之後,原來取出去的元素的位置便設定為預設值,相當於沒有儲存有效的元素, 而當_tail為陣列最後一位且有效儲存元素數_size又小於實際容量時,_tail又可以通過取餘的方式將其指向索引較小的地方,從而實現迴圈儲存。

c 中佇列類模板的實現

佇列類模板定義 template class varqueue varqueue unsigned int maxcount public 出隊處理,先進先出 unsigned int poppoint point type point 入隊處理,追加在隊的末尾 取得某結點的值 bool getpo...

Python中佇列實現

class queue object 佇列的資料結構,佇列就是容器,先進先出 def init self self.mylist def add self,item 往佇列中放入元素,假設選擇列表的尾部作為佇列的插入端 在列表中,如果是push,則是從尾端推進去的,頂部作為尾端,pop則是從頭部取出...

資料結構中佇列的基本操作實現

佇列是一種特殊的線性表,在這種線性表中,刪除運算限定在表的一段進行,而插入運算限定在表的另一端進行,通常,約定把允許插入的一端稱為隊尾,把允許刪除的一端稱為隊首。佇列進出的原則是先進隊的先出隊,即先進先出原則。佇列在計算機程式設計中經常被用到,如windows作業系統的訊息佇列。接下來我們看一下佇列...