前面乙個篇部落格介紹了棧,現在來介紹一下佇列,它和棧有一定的相似度,可以看完兩個之後對比記憶。
佇列是乙個先進先出
的資料結構,允許插入的一端稱為隊尾
,允許刪除的一端稱為對首
,示意圖如下。
和棧一樣,可以基於陣列和鍊錶實現佇列。
示意圖:
**實現:
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...