Transcript Chapter3

โครงสร้างข้อมูลแบบคิว
QUEUE
1
เนือ้ หา
คิว
 โอเปอร์ เรชัน
่ ของคิว

การเพิ่มข้อมูลเข้าไปในคิว (En Queue)
 การลบข้อมูลออกจากคิว (De Queue)

คิวแบบวงกลม
 การประยุกต์ใช้งานคิว

Queue
Slide# 2 2
คิว : Queue
คิวเป็ นลิสต์ แบบเชิงเส้ นเช่ นเดียวกับสแตค แต่ มีความ
แตกต่ างกันตรงที่คิวมีตัวชี้ 2 ตัว คือ front และ rear
ส าหรั บการใส่ ข้ อมู ล เข้ าและน าข้ อมู ล ออก คิ ว มี
กระบวนการทางานแบบ First In First Out : FIFO
Queue
Slide# 3 3
ตัวอย่ างของคิว
A
B
C
…
front
ลบข ้อมูล
A
rear
B
front +1
Queue
n
C
…
n
rear
Slide# 4 4
Chapter 4 Stack and Queue
้ น
่ เดียวกับสแตก และคิว
โครงสร ้างข ้อมูลแบบเชงิ เสนเช
มีตวั ช ี้ 2 ตัว - หัว (Head)
- หาง (Tail)
ข ้อมูลจะเข ้าทางหางและออกทางหัวทีเ่ รียกว่า FIFO
ก
ข
H
ค
T
5
Chapter 4 Stack and Queue
Queue
ข
ค
H+1
ข
T
ค
ง
H+1
T+1
A
H
T
H and T = NULL
6
Chapter 4 Stack and Queue
Queue ( circular queue)
H=1
T=2
H=2
ก
ข
1
2
T=4
3
4
1
H=3
T=1
H=3
ข
ค
ง
2
3
4
H=4
จ
1
2
ค
ง
3
4
T=1
T=4
1
2
จ
ฉ
1
2
ค
ง
3
4
3
4
H=1
จ
1
ง
2
3
4
T=2
Circular queue มีหลักอยูว่ า่ ต ้องทราบจานวนสูงสุดของ
้ บข ้อมูล
หน่วยความจาทีใ่ ชเก็
7
สถานะของคิว
0
1
2
front = -1
rear = -1
0
front = 0
rear = 0
front = 0
rear = 1
A
1
2
c) enqueue B
0
front = 1
rear = 2
1
2
B
C
e) enqueue C
Queue
A
0
front = 1
rear = 1
B
2
b) enqueue A
a) empty queue
0
1
1
2
B
d) dequeue A
0
front = 2
rear = 2
full queue
1
2
C
f) dequeue B
Slide# 8
Chapter 4 Stack and Queue
อัลกอริธึม INSQ (Q,N,H,T,DATA) : Q = คิวของข้อมูล
1. ถ้ า H = 1 และ T = N หรือถ้ า H = T+1 แสดงว่าคิวเต็มและจบการทางาน
1.1 ถ้ า H = NULL ดังนั้นให้ H = 1 and T = 1
1.2 ถ้ า T = N ให้ T = 1 และ
1.3 ถ้ า T = ตาแหน่ งใดๆให้ T = T+1
2. ให้ Q [T] = DATA
3. จบการดาเนินการ
9
Chapter 4 Stack and Queue
อัลกอริธึม DELQ (Q,N,H,T,DATA)
1. ถ้ า H = NULL ดังนั้นคิว Underflow และจบการทางาน
2. ให้ DATA = Q [H]
2.1 ถ้ า H = T ให้ H = T= NULL
2.2 ถ้ า H = N ให้ H = 1
2.3 ถ้ า H = ตาแหน่ งใดๆในคิว ให้ H = H+1
3. จบการดาเนินการ
10
การเพิม่ ข้ อมูลเข้ าไปในคิว : En Queue
การนาข้ อมูลเข้ าที่ rear ซึ่งจะชี้สมาชิกตัวสุ ดท้ าย และ
ต้ องเพิม่ ค่ า rear ทีละ 1 ก่ อนจะนาสมาชิกใหม่ เข้ ามา และทา
ลักษณะเช่ นนีจ้ นกว่ าคิวจะเต็ม ที่ rear=n-1 เป็ นค่ าสู งสุ ด
Queue
Slide# 1111
De Queue
ในการจัดรูปแบบของคิวอีกรูปแบบเรียกว่า ดีควิ หรือ เดค
ซงึ่ แบ่งออกเป็ น 2 ชนิด
1. ดีควิ ทีจ
่ ากัดการนาเข ้าของข ้อมูล(In-put restricted de queue)
่ ้อมูลได ้เพียงด ้านเดียว แต่ลบข ้อมูลออกได ้ทัง้
ดีควิ ทีใ่ สข
สองด ้าน
2. ดีควิ ทีจ
่ ากัดการสง่ ออกของข ้อมูล(Out-put restricted de queue)
่ ้อมูลได ้ทัง้ สองด ้าน แต่ลบข ้อมูลออกได ้เพียง
ดีควิ ทีใ่ สข
ด ้านเดียว
12
En Queue
ในการจัดลาดับและการลบออกของคิวทีม
่ ข
ี บวนการดัง
ต่อไปนี้
1. ข ้อมูลทีม
่ ล
ี าดับความสาคัญสูงสุดจะถูกเรียกทางานก่อน
2. ในกรณีทม
ี่ ล
ี าดับความสาคัญเท่ากันเลือกอันทีม
่ าก่อน
ในการสร ้างคิวแบ่งได ้เป็ น 2 ลักษณะ
1. คิวแบบแถวเดียว (One Way List)
ี้ ด
ประกอบด ้วย 3 สว่ น (ข ้อมูล, ลาดับความสาคัญ และตัวชถ
ั ไป)
H
1
T
ก
1
ก
1
ก
1
ก
13
Chapter 4 Stack and Queue
ในการสร ้างคิวแบ่งได ้เป็ น 2 ลักษณะ
2. คิวแบบหลายคิวตามจานวนลาดับความสาคัญและกาหนด
เป็ นลักษณะหลายแถวเรียกว่า circular Queue มีลก
ั ษณะ 2 มิต ิ
ไม่เป็ นข ้อมูลแบบเชงิ เสน้
1
2
ข
ก
ค
1
2
3
4
ฉ
3
จ
4
ตาแหน่ง
ง
ลาดับความสาคัญ
14
Enqueue
Queue
addq ( int item )
{ if ( rear == MAX - 1 )
{ printf ( "\nQueue is full" ) ;
return ;
}
rear++ ;
กรณี e) และ f) คิวเต็ม
arr[rear] = item ;
if ( front == -1 )
front = 0 ;
}
Slide# 1515
การลบข้ อมูลจากคิว : De Queue
การนาข้ อมูลออกจากคิว จะออกที่ front ซึ่งจะชี้ที่สมาชิก
ตัวแรกเสมอ ค่ า front จะเพิ่มขึน้ ทีละ 1 ทุกครั้ งหลังจากนา
ข้ อมูลออกจากคิวแล้ ว ทาจนกระทั่ง front = rear โดย
กาหนดให้ ค่าของ front=-1 และ rear=-1 ซึ่งแสดงว่ าคิวว่ าง
Queue
Slide# 1616
Dequeue
delq( )
{ int data ;
if ( front == -1 )
{
printf ( "\nQueue is Empty" ) ;
return NULL ;
}
data = arr[front] ;
if ( front == rear )
front = rear = -1 ;
กรณีลบคิวทีเ่ หลือเพียงตัวเดียว
else
front++ ;
return data ;
}
Queue
Slide# 1717
คิววงกลม : Circular Queue
คือคิวที่เปรียบเสมือนกับ ลิเนียร์ อาเรย์ ทั่ว ๆ ไป แตกต่ าง
เพียงแต่ ว่า คิววงกลมสามารถกลับไปใช้ ควิ หน้ าได้ ในกรณีที่
หมดคิวปกติแล้ ว
Queue
Slide# 1818
คิวแบบวงกลม
0
1
front = 2
rear = 2
2
C
f) full queue
0
front = 1
rear = 0
D
1
2
C
กรณี ค วิ เต็ ม ก ำหนดให้ rear
ี้ จ
ไปชท
ี่ ด
ุ เริม
่ ต้นใหม่ (0) เพือ
่
g) enqueue D
Queue
สำมำรถเพิม
่ D เข้ำไปได้
Slide# 1919
Enqueue of Circular Queue
addq ( int item )
{ if ( ( rear == MAX - 1 && front == 0 ) || ( rear + 1 == front ) )
{
printf ( "\nQueue is full" ) ;
return ;
แสดงข้อควำมว่ำ “คิวเต็ม”
}
่ กรณี h)
เชน
if ( rear == MAX - 1 )
rear = 0 ;
else
กรณี g) คิวเต็ม เมือ
่ ต้องกำรเพิม
่
rear++ ;
ข้อมูลเข้ำไปอีก ให้กำหนด rear ไป
arr[rear] = item ;
if ( front == -1 )
ี้ จ
ชท
ี่ ด
ุ เริม
่ ต้นใหม่
front = 0 ;
}
Queue
Slide# 2020
เพิม
่ ข้อมูลในคิวแบบวงกลม
0
front = 1
rear = 0
D
1
2
C
g) enqueue D
Queue
front = 2
rear = 1
0
1
2
D
E
C
h) enqueue E
Slide# 2121
Dequeue of Circular Queue
Queue
delq( )
{ int data ;
if ( front == -1 )
{
printf ( "\nQueue is Empty" ) ;
return NULL ;
}
กรณี k) ลบคิวทีเ่ หลือเพียงต ัวเดียว
else
{
data = arr[front] ;
if ( front == rear )
่ งควำมจำสุดท้ำย
front = rear = -1 ;
กรณี i) ลบคิวทีช
่ อ
else
ี้ จ
กำหนดให้ front วนไปชท
ี่ ด
ุ เริม
่ ต้น
{ if ( front == MAX - 1 )
front = 0 ;
ใหม่
else
front++ ;
}
}
return data ;
}
Slide# 22
22
ลบข ้อมูลในคิวแบบวงกลม
0
front = 2
rear = 1
D
1
E
2
C
front = 0
rear = 1
h) enqueue E
0
front = 1
rear = 1
1
j) dequeue D
Queue
1
D
E
2
i) dequeue C
2
E
0
0
1
2
front = -1
rear = -1
k) dequeue E
Slide# 2323
Chapter 4 Stack and Queue
สรุป
ในบทแสดงโครงสร ้างข ้อมูล 2 ชนิด สแตก และ คิว
ความแตกต่างของโครงสร ้างใน การจัดเก็บ และขบวนการลบ
การแทรกข ้อมูล
้
การประยุกต์ใชในเรื
อ
่ งการจัดลาดับการทางานสมการ
ทางคณิตศาสตร์ ในเรือ
่ งการแก ้สมการ อินฟิ ก ด ้วย พรีฟิก
และโพสฟิ ก
24
Home work
1. จงอธิบายถึงสิ่ งที่เหมือนกันและสิ่ งที่แตกต่างกันระหว่างสแตกกับคิว
2. “ท็อปของสแตก” คืออะไร จงอธิบาย
3. จงอธิบายถึงสิ่ งที่เหมือนกันและสิ่ งที่แตกต่างกันระหว่างคิวเส้นตรงกับคิววงกลม
4. จงเปรี ยบเทียบข้อดี ข้อเสี ยของโครงสร้างข้อมูลสแตก คิววงกลม และคิวเส้นตรง
5. คิวขนาด 7 ค่า มีรายการต่อไปนี้
Front = 2, Rear = 6,
Queue [ ] = {null, null, “ขนุน”, “ส้มโอ”, “แตงโม”, “ฝรั่ง”, null }
จงอธิบายผลของคิวแบบวงกลม โดยมีค่าเริ่ มต้นตาแหน่งที่ 0 รวมทั้ง Front และ Rear
เมื่อมีการกระทาต่อไปนี้
25
Home work
ก. เพิ่มมะม่วง
ข. ลบ 2 รายการออกจากคิว
ค. เพิ่ม “ทุเรี ยน” ลงในคิว
ง. เพิ่ม “องุ่น” ลงในคิว
จ. ลบ 2 รายการออกจากคิว
ฉ. เพิ่ม “ละมุด” ลงในคิว
26
Home work
6. จงเขียนแผนภาพและค่าของตัวแปรของคิวที่มีสมาชิกเป็ นเลข
จานวนเต็มและสร้างด้วยลิงค์ลิสต์ เมื่อมีการดาเนินการดังนี้
ก. สร้างคิวว่าง
ข. เพิ่ม 5 และ 8 ลงในคิว
ค. นาข้อมูลออกจากคิว 1 ค่า
ง. เพิ่มข้อมูลในคิวอีก 5 ค่า
จ. นับจานวนสมาชิกในคิว
27