資料結構 佇列

2021-09-29 17:03:07 字數 3079 閱讀 7114

前面乙個篇部落格介紹了棧,現在來介紹一下佇列,它和棧有一定的相似度,可以看完兩個之後對比記憶。

佇列是乙個先進先出的資料結構,允許插入的一端稱為隊尾,允許刪除的一端稱為對首,示意圖如下。

和棧一樣,可以基於陣列和鍊錶實現佇列。

示意圖:

**實現:

public

class

arrayqueue

data =

newobject

[len]

; tail =-1

;}/** * 入隊

*/public

void

enqueue

(object o)

data[

++tail]

= o;

}public object dequeue()

object ret = data[0]

;// 所有的元素向左移動

for(

int i =

1; i <= tail; i++

) tail--

;return ret;

}public

boolean

empty()

/** * 列印方式: 隊首->隊尾

* @return

*/@override

public string tostring()

if(stringbuffer.

length()

==1)else

}public

static

void

main

(string[

] args)

}

屬性分析

data: [0]位置看做成隊首,[tail]看做隊尾,佇列只是data的乙個元素子集,通過tail控制佇列元素範圍。

tail: 隊尾元素位置

方法分析

enqueue: 入隊,在tail乙個元素位置新增乙個新的元素。如果超出陣列長度,需要擴容。

dequeue: 出隊,取陣列下標為0的元素,並陣列範圍[0,tail]整體向左移動。

示意圖:

**實現:

public

class

linkedqueue

}public

void

enqueue

(object o)

else

size++;}

public object dequeue()

object ret = head.data;

head = head.next;

size--

;return ret;

}public

boolean

empty()

/** * 列印方式: 隊首->隊尾

* @return

*/@override

public string tostring()

if(stringbuffer.

length()

==1)else

}public

static

void

main

(string[

] args)

}

上面的**和原來操作鍊錶的部落格非常相似,這裡就不做贅述。參考:資料結-棧

在基於陣列的佇列實現,可以看到每次出隊之後需要將佇列元素整體移動,這個是比較消耗效能的,有沒有方式可以將解決這個問題呢?有,就向下面示意圖一樣,我們可以增加乙個head的指標,控制陣列下標為[head,tail]這段的資料作為佇列元素。

但是還是存在乙個問題:head前面的元素空間會遺留越來越多,即:佇列的無效空間會一直增大,這個又需要如果解決呢?

通過上面的方式,就可以解決空間浪費的問題。

**實現:

public

class

circlearrayqueue

public

void

enqueue

(object o)

data[tail]

= o;

tail =

(tail +1)

% maxsize;

size++;}

public object dequeue()

object ret = data[head]

; head =

(head +1)

% maxsize;

size--

;return ret;

}public

boolean

empty()

public

boolean

full()

@override

public string tostring()

if(stringbuffer.

length()

==1)else

}public

static

void

main

(string[

] args)

}

資料結構 佇列

一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...

資料結構 佇列

資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...

資料結構 佇列

code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...