139
Biểu
Biểu diễndiễn QueueQueue dùngdùng mảngmảng
ĐểĐể khaikhai báobáo mộtmột hànghàng đợiđợi, , tata cầncần: :
mộtmột mảngmảng mộtmột chiềuchiều QQ, ,
haihai biếnbiến nguyênnguyên ff, , rr chocho biếtbiết chỉchỉ sốsố củacủa đầuđầu vàvà cuốicuối của
của hànghàng đợiđợi
hằnghằng sốsố NN chocho biếtbiết kíchkích thướcthước tốitối đađa củacủa hànghàng đợiđợi. .
NgồiNgồi rara, , khikhi dùngdùng mảngmảng biểubiểu diễndiễn hànghàng đợiđợi, , cầncần dùngdùng
một
một giágiá trịtrị đặcđặc biệtbiệt, , kýký hiệuhiệu làlà NULLDATANULLDATA, , đểđể gángán chocho những
những ơơ cịncịn trốngtrống trêntrên hànghàng đợiđợi. . GiáGiá trịtrị nàynày làlà mộtmột giágiá trịtrị nằm
140
Biểu
Biểu diễndiễn QueueQueue dùngdùng mảngmảng
TrạngTrạng tháithái hànghàng đợiđợi lúclúc bìnhbình thườngthường: :
141
Biểu
Biểu diễndiễn QueueQueue dùngdùng mảngmảng
HàngHàng đợiđợi cĩcĩ thểthể đượcđược khaikhai báobáo cụcụ thểthể nhưnhư sausau::
typedef struct node
{
int data; }
typedef struct queue {
int front, rear;
node list[N]; }
DoDo khikhi càicài đặtđặt bằngbằng mảngmảng mộtmột chiềuchiều, , hànghàng đợiđợi cĩcĩ kíchkích thướcthước
tối
tối đađa nênnên cầncần xâyxây dựngdựng thêmthêm mộtmột thaothao táctác phụphụ chocho hànghàng đợiđợi::
142
Biểu
Biểu diễndiễn QueueQueue dùngdùng mảngmảng
TạoTạo hànghàng đợiđợi rỗngrỗng
void Init(queue &q) {
q.front = q.rear = UNDERFLOW; }
Kiểm tra queue rỗng
int Empty(queue q) {
if(q.front == q.rear == UNDERFLOW) return 1; return 0;
143
Biểu
Biểu diễndiễn QueueQueue dùngdùng mảngmảng
KiểmKiểm tratra hànghàng đợiđợi đầyđầy hayhay khơngkhơng
int Full(queue q) {
if( q.front== 0 && q.rear== N-1) return 1;
if( q.front == q.rear+1) return 1;
return 0; }
144
Biểu
Biểu diễndiễn QueueQueue dùngdùng mảngmảng
ThêmThêm mộtmột phầnphần tửtử xx vàovào cuốicuối hànghàng đợiđợi QQ
void EnQueue(queue &q, node x) {
if(!Full(q)) //Queue chưa đầy
{if(Empty(q) // Queue rỗng if(Empty(q) // Queue rỗng q.front=q.rear=0; else if( q.rear==N-1) q.rear=0; else q.rear++; q.list[q.rear]=x; } }
145
Biểu
Biểu diễndiễn QueueQueue dùngdùng mảngmảng
TríchTrích, , huỷhuỷ phầnphần tửtử ởở đầuđầu hànghàng đợiđợi QQ
node DeQueue(queue &q) {
if(!Empty(q)) {
node t=q.list[q.front];
if(q.front == q.rear) Init(q);
else if(q.fornt == N -1) q.front = 0; else q.front++; return t; } }
146
Biểu