data structure lesson06
-
Upload
suhatt-jantorn -
Category
Documents
-
view
213 -
download
0
description
Transcript of data structure lesson06
!"!
แผนการสอนประจําบทเรียน
รายช่ืออาจารยผูจัดทํา ไกรสร วงศพราวมาศ และ สุณี รักษาเกียรติศักดิ ์
หัวขอของเนื้อหา
ตอนที ่6.1 ชนิดขอมูลแบบคิว เร่ืองท่ี 6.1.1 การกําหนดคุณลักษณะเฉพาะของคิว เร่ืองท่ี 6.1.2 การสรางคิวดวยอะเรย เร่ืองท่ี 6.1.3 การสรางคิวดวยลิงคลิสต เร่ืองท่ี 6.1.4 การใชคิว
ตอนที ่ 6.2 การประยุกตใชคิว เร่ืองท่ี 6.2.1 ระบบการใหบริการตาง ๆ
แนวคดิ 1. ชนิดขอมูลแบบคิวมีการประยุกตใชมากในวิทยาการคอมพิวเตอร 2. ชนิดขอมูลแบบคิวมีโครงสรางขอมูลแบบเชิงเสน (linear) 3. ชนิดขอมูลแบบคิวมีคุณสมบัติเฉพาะคือสมาชิกขอมูลที่เขาไปในคิวกอนจะออกกอน (First In
First Out หรือ FIFO) 4. การดําเนินงานกับคิวไดแก การสรางคิว (create) การนําสมาชิกขอมูลเขาคิว (enqueue) การนําสมาชิกขอมูลออกจากคิว (dequeue) การทดสอบวาคิววางหรือไม (empty) การทดสอบวาคิวเต็มหรือไม (full) การทําใหคิวเปนคิววาง (clear)
5. การที่จะใหผูใชเขาใจคุณสมบัติของคิวที่ตรงกัน จะตองมีการออกแบบคุณสมบัติของคิว โดยการเขียนคุณลักษณะเฉพาะ (specification) ของคิวที่เราตองการอยางชัดเจน
6. เม่ือมีการเขียนคุณลักษณะเฉพาะท่ีชัดเจนแลว ผูสรางจะสามารถสรางคิวตามที่ออกแบบไวได โดยรายละเอียดของการสรางจะซอนจากผูใช
7. ในการสรางคิว ผูสรางตองดําเนินการสองส่ิงใหญๆ คือ เลือกการแทนท่ีขอมูลของคิวและสรางการดําเนินงานโดยใชการแทนท่ีขอมูลท่ีเลือกแลว
8. ในการสรางคิว ผูสรางสามารถเลือกใชการแทนท่ีขอมูลของคิวแบบอะเรยหรือลิงคลิสตก็ได
!"#
9. ในการใชชนิดขอมูลแบบคิว ผูใชเพียงแตใชตามคุณลักษณะเฉพาะที่ออกแบบใชเทานั้น ไมตองสนใจวาผูสรางจะเลือกการแทนที่ขอมูลของคิวอยางไร และสรางมาดวยวิธีการอยางไร
วัตถุประสงค หลักจากศึกษาบทเรียนที่ 6 แลว นักศึกษาสามารถ 1. บอกถึงคุณลักษณะเฉพาะของคิวได วาคิวมีชนิดขอมูลสมาชิกเปนอยางไร มีโครงสรางขอมูลอยางไร และสามารถดําเนินงานอะไรกับคิวไดบาง
2. สรางคิวโดยใชการแทนที่ขอมูลแบบอะเรยได 3. สรางคิวโดยใชการแทนที่ขอมูลแบบลิงคลิสตได 4. บอกตัวอยางการประยุกตใชคิวในสาขาวิทยาการคอมพิวเตอรได
กิจกรรมการเรียนการสอน กิจกรรมท่ีนักศึกษาตองทําสําหรับการเรียนการสอน ไดแก 1. ศึกษาเอกสารชดุวิชา/โฮมเพจชุดวิชา ตอนที่ 6.1 และตอนที ่6.2 2. ทํากิจกรรมของบทเรียนที่ 6 3. ทําแบบประเมินผลของบทเรียนที่ 6
เอกสารประกอบการสอน 1. เอกสารชดุวิชา
สื่อการสอน 1. โฮมเพจชุดวิชา 2. สไลดประกอบการบรรยาย (Powerpoint) 3. โปรแกรมคอมพิวเตอร
ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน
!"$
ตอนท่ี 6.1 ชนิดขอมูลแบบคิว
หัวเรื่อง เร่ืองท่ี 6.1.1 การกําหนดคุณลักษณะเฉพาะของคิว เร่ืองท่ี 6.1.2 การสรางคิวดวยอะเรย เร่ืองท่ี 6.1.3 การสรางคิวดวยลิงคลิสต เร่ืองท่ี 6.1.4 การใชคิว
แนวคดิ 1. การกําหนดคุณลักษณะเฉพาะของคิวมีความสําคัญมากในการสื่อสารระหวางผูสรางคิวและผูใชคิว โดยที่ผูใช ใชโดยทราบขอกําหนดจากคุณลักษณะเฉพาะท่ีกําหนดและผูสรางไดสรางตามคุณลักษณะเฉพาะท่ีกําหนด
2. ผูใชไมตองสนใจรายละเอียดของการสราง ผูใชเพียงแตทราบวาคิวมีคุณสมบัติอยางไรและสามารถดําเนินงานอะไรกับคิวไดบาง ในการดําเนินงานแตละอยาง ผูใชตองใหขอมูลเขา อยางไรและผูใชจะไดผลลัพธอะไรหลังจากใชการดําเนินงานนั้นๆ
3. ผูสรางสามารถที่จะสรางคิวโดยใชการแทนที่ขอมูลแบบอะเรยหรือลิงคลิสตก็ได โดยไมมีผลตอการเรียกใชของผูใช
วัตถุประสงค หลังจากที่ศึกษาตอนที่ 6.1 แลว นักศึกษาสามารถ 1. เขียนคุณลักษณะเฉพาะของชนิดขอมูลแบบคิว และบอกการดําเนินงานท่ีสําคัญของคิวได 2. สรางคิวดวยอะเรยได 3. สรางคิวดวยลิงคลิสตได 4. ทดสอบการใชงานคิวได
เรื่องที่ 6.1.1 การกําหนดคุณลักษณะเฉพาะของคิว
ในการกําหนดคุณลักษณะเฉพาะของคิวจะประกอบดวย 3 สวนใหญๆ คือ - การกําหนดวาสมาชิกขอมูลของคิวที่ใชมีชนิดขอมูลเปนอะไร - การกําหนดวาสมาชิกของคิวมีโครงสรางหรือความสัมพันธกันอยางไร - การกําหนดวาเราสามารถดําเนินงานอะไรกับคิวไดบาง โดยรายละเอียดของคุณลักษณะเฉพาะของคิวจะเปนดังน้ี
!"%
คุณลักษณะเฉพาะ 6.1 คุณลักษณะเฉพาะของชนิดขอมูลแบบคิว สมาชิก : สมาชิกของคิวจะมีชนิดเปนอยางไรก็ได แตในที่นี้สมมุติใหมีชนิดเปน StdElement โครงสราง : คิวจะมีโครงสรางแบบเชิงเสน และอันดับของการนําสมาชิกเขาออกจากคิวมีความ
สําคัญ คือ สมาชิกที่เขาไปอยูในคิวกอนจะออกจากคิวกอนสมาชิกที่เขาไปในคิวทีหลัง น่ันคือการเขากอนออกกอน ( First In First Out หรือ FIFO )
การดําเนินงาน: มีการดําเนินงานทั้งหมด 6 การดําเนินงาน ไดแก สัญลักษณ : ให Q-pre เปนสถานะของคิวกอนการดําเนินงาน ให Q-post เปนสถานะของคิวหลังการดําเนินงาน Crete Pre: ไมมี Post: มีคิววางเกิดขึ้น Enqueue (E : StdElement) Pre: คิวยังไมเต็ม Post: คิวจะมี E เปนสมาชิกลาสุดของคิว และ E จะถูกใสลงในทายคิว (tail) Serve (VAR E : StdElement) Pre: คิวตองไมวาง Post: E เปนสมาชิกแรกสุด (head) ของ Q-pre คิวหลังการดําเนินงานหรือ Q-post จะไมมี E
เปนสมาชิกอีกตอไป Empty : boolean Pre: ไมมี Post: ถา คิวไมมีสมาชิกอยูเลย แลว Empty จะเปนจริง ไมเชนนั้น Empty จะเปนเท็จ Full : boolean Pre: ไมมี Post: ถา คิวมีสมาชิกเต็ม แลว Full จะเปนจริง ไมเชนนั้น Full จะเปนเท็จ Clear Pre: ไมมี Post: คิวจะเปนคิววาง Length : Integer Pre: ไมมี Post: Length จะเปนจํานวนสมาชิกในคิว
!"&
ตัวอยาง 6.1 ตัวอยางการดําเนินงานกับคิว ตารางขางลางนี้แสดงสถานของคิวหลังการดําเนินงาน (Q-post) และผลลัพธท่ีเกิดจากการดําเนิน
งาน (Output) ของลําดับของการดําเนินงาน (Operation) ตาง ๆ กับคิว ในที่นี้สมมติใหสมาชิกของคิวมีชนิดเปน StdElement โดยมีคียเปน char และจะแสดงเพียงสวนคียของขอมูลสมาชิกของคิวเทาน้ัน
No. Operation Input Q-Post Output 1. Create [] 2. Empty [] true 3. Enqueue A [A] 4. Enqueue B [A,B] 5. Empty [A,B] False 6. Enqueue C [A,B,C] 7. Enqueue D [A,B,C,D] 8. Dequeue [B,C,D] A 9. Length [B,C,D] 3
กิจกรรม 6.1 ฝกการเขียนคุณลักษณะเฉพาะของคิว คุณลักษณะเฉพาะของการดําเนินงาน Dequeue มีเงื่อนไขเริ่มตน (pre) วาคิวตองไมวาง หากเราเอาเง่ือนไขเร่ิมตนน้ีออกไป นั่นคือคิวจะเปนคิววางก็ได ถาคิวเปนคิววาง การดําเนินงานของ Dequeue ก็ไมสําเร็จซ่ึงจะสงผลลัพธออกทางพารามิเตอร Fail จงเขียนคุณลักษณะเฉพาะของการดําเนินงาน Dequeue ใหมตามขอกําหนดขางตน
กิจกรรม 6.2 เปรียบเทียบการดําเนินงานของสแตกและคิว การดําเนินงานของคิว Enqueue เปรียบเทียบไดกับการดําเนินงานอะไรของสแตก และ การ
ดําเนินงานของคิว Dequeue เปรียบเทียบไดกับการดําเนินงานอะไรของสแตก
เรื่องที่ 6.1.2 การสรางคิวดวยอะเรย
การสรางคิวดวยอะเรย หมายถึง การแทนที่ขอมูลของคิวดวยอะเรย ซ่ึงเปนการจัดสรรเน้ือท่ีหนวยความจําแบบสแตติก น่ันคือ มีการกําหนดขนาดของคิวลวงหนาวามีขนาดเทาใดและจะมีการจัดสรรเนื้อที่หนวยความจําใหเลย ภาพประกอบท่ี 6.1 แสดงการดําเนินงานของคิวของตัวอยางที่ 6.1 ที่มีการแทนที่ขอมูลดวยอะเรยขนาด 4 (สมมติใหสมาชิกของคิวมีชนิดเปน StdElement ที่มีคียเปน char)
!"'
0 1 2 3 4 N Hea
d Tail
Create Q 0 0 0 ↑ ↑ Head Tail
0 1 2 3 4 N Head
Tail
Enqueue Q A 1 0 1 ↑ ↑ Head Tail
0 1 2 3 4 N Head
Tail
Enqueue Q A B 2 0 2 ↑ ↑ Head Tail
0 1 2 3 4 N Head
Tail
Enqueue Q A B C 3 0 3 ↑ ↑ Head Tail
0 1 2 3 4 N Head
Tail
Enqueue Q A B C D 4 0 4 ↑ ↑ Head Tail
0 1 2 3 4 N Head
Tail
Dequeue Q B C D 4 1 4
!"(
↑ ↑ Head Tail
ภาพประกอบ 6.1 ภาพแสดงการนําสมาชิกเขาและออกจากคิวที่สรางดวยอะเรย
!")
UNIT QueueUA1;
{*********}
INTERFACE
{*********}
CONST MaxSize = 100;
TYPE Computer=RECORD
Serial_No:String[5];
Cpu:string[10];
Ram:string[10];
HardDisk:string[10];
CD_ROM:string[10];
END;
VAR Q : ARRAY [1..MaxSize] OF Computer;
HEAD, Tail : 0..MaxSize;
PROCEDURE Create;
PROCEDURE Enqueue(E:Student);
PROCEDURE Dequeue(VAR E:Student);
FUNCTION Empty : boolean;
FUNCTION Full : boolean;
PROCEDURE Clear;
FUNCTION Length : integer;
{*********}
IMPLEMENTATION
{*********}
PROCEDURE Create;
BEGIN
Head := 0;
Tail := 0;
END;
PROCEDURE Enqueue(E:Student);
BEGIN
Tail := Tail + 1;
Q[Tail] := E;
END;
PROCEDURE Dequeue(VAR E:Student);
BEGIN
Head := Head + 1;
E := Q[Head];
END;
FUNCTION Empty : boolean;
BEGIN
IF Tail = 0 THEN Empty := true
!"*
ELSE Empty := false;
END;
FUNCTION Full : boolean;
BEGIN
IF Tail = MaxSize THEN Full := true
ELSE Full := false;
END;
PROCEDURE Clear;
BEGIN
Tail := 0;
Head := 0;
END;
FUNCTION Length : integer;
BEGIN
Length := Tail - Head;
END;
END.
โปรแกรม 6.1 การสรางคิวดวยอะเรย
จากโปรแกรม 6.1 และตัวอยางการนําสมาชิกเขาและออกจากคิวของภาพประกอบ 6.1 จะเห็นไดวา ณ สถานสุดทายหากเราทดสอบการดําเนินงาน Full เราก็จะได true ซึ่งในความเปนจริงแลวยังมีเนื่อที่วางใน Q[1] ดังนั้นเพื่อแกปญหานี้และทําใหการสรางคิวดวยอะเรยมีประสิทธิภาพโดยที่ไมตองมีการเคลื่อนยายขอมูล เราก็สามารถทําไดโดยทําใหเปนคิววงกลม ดังภาพประกอบท่ี 6.2 และโปรแกรม 6.2 ไดแสดงคิววงกลม
!!"
ภาพประกอบ 6.2 คิววงกลม
UNIT QueueUA2;
{*********}
INTERFACE
{*********}
CONST MaxSize = 100;
TYPE Computer=RECORD
Serial_No:String[5];
Cpu:string[10];
Ram:string[10];
HardDisk:string[10];
CD_ROM:string[10];
END;
VAR Q : ARRAY [1..MaxSize] OF Computer;
HEAD, Tail : 0..MaxSize;
PROCEDURE Create;
PROCEDURE Enqueue(E:Student);
PROCEDURE Dequeue(VAR E:Student);
FUNCTION Empty : boolean;
FUNCTION Full : boolean;
PROCEDURE Clear;
FUNCTION Length : integer;
{*********}
IMPLEMENTATION
{*********}
!!!
PROCEDURE Create;
BEGIN
Head := 0;
Tail := 0;
END;
PROCEDURE Enqueue(E:Student);
BEGIN
Tail := Tail MOD MaxSize + 1;
Q[Tail] := E;
END;
PROCEDURE Dequeue(VAR E:Student);
BEGIN
END;
FUNCTION Empty : boolean;
BEGIN
END;
FUNCTION Full : boolean;
BEGIN
IF (Tail MOD MaxSize) = Head THEN Full := true
ELSE Full := false;
END;
PROCEDURE Clear;
BEGIN
END;
FUNCTION Length : integer;
BEGIN
END;
END.
โปรแกรม 6.2 การสรางคิววงกลมดวยอะเรย
กิจกรรม 6.3 ฝกสรางคิว จงเขียนโปรแกรม 6.2 ใหสมบูรณ และใหตั้งชื่อไฟลเปน QueueAU.pas พรอมคอมไพลโปรแกรม
!!#
เรื่องที่ 6.1.3 การสรางคิวดวยลิงคลิสต
ในการสรางคิวดวยลิงคลิสต หมายถึงเราเลือกการแทนที่ขอมูลของคิวดวยลิงคลิสตซึ่งเปนการจัดสรรเนื้อที่หนวยความจําแบบไดนามิก น้ันคือ หนวยความจําจะถูกจัดสรรเมื่อมีการขอใชจริง ๆ ระหวางการประมวลผลโปรแกรมผานตัวแปรชนิด pointer ในการสรางคิวดวยลิงคลิสตคิวจะไมมีวันเต็ม (ไมมีการดําเนินงาน Full) ตราบใดที่ยังมีเนื้อที่ของฮีปในหนวยความจํา สวนหนึ่งของโปรแกรมการสรางคิวดวยลิงคลิสตไดแสดงในโปรแกรม 6.3
UNIT QueueUL; 1
INTERFACE 2
TYPE Computer=RECORD 3
Serial_No:String[5]; 4
Cpu:string[10]; 5
Ram:string[10]; 6
HardDisk:string[10]; 7
CD_ROM:string[10]; 8
END; 9
Node = RECORD 10
El:Computer; 11
Next:pointer; 12
END; 13
pointer = ^Node; 14
VAR Head,Tail:pointer; 15
PROCEDURE Create; 16
PROCEDURE Enqueue(E:Computer); 17
PROCEDURE Serve(VAR E:Computer;VAR Fail:boolean); 18
FUNCTION Empty:boolean; 19
FUNCTION Full:boolean; 20
PROCEDURE Clear; 21
FUNCTION Length:integer; 22
IMPLEMENTATION
PROCEDURE Create;
BEGIN
Head:=nil;
Tail:=nil;
END;
PROCEDURE Enqueue(E:Computer);
VAR P:pointer;
BEGIN
new(P);
P^.El:=E;
IF Head=nil THEN
!!$
BEGIN
Head:=P;
Tail:=P;
Tail^.Next:=nil;
END
ELSE
BEGIN
P^.Next:=Tail^.Next;
Tail^.Next:=P;
Tail:=P;
END;
END;
PROCEDURE Serve(VAR E:Computer;VAR Fail:boolean);
VAR P:pointer;
BEGIN
END;
FUNCTION Empty:boolean;
BEGIN
END;
PROCEDURE Clear;
BEGIN
END;
FUNCTION Length:integer;
VAR P:pointer;
I:integer;
BEGIN
P:=Head;
I:=0;
IF Head<>nil THEN
BEGIN
WHILE P^.Next<>nil DO
BEGIN
P:=P^.Next;
I:=I+1;
END;
Length:=I+1;
END
ELSE Length:=0;
END;
END.
โปรแกรม 6.3 การสรางคิวดวยลิงคลิสต
!!%
กิจกรรม 6.4 ฝกการสรางคิวดวยลิงคลิสต 1. ในโปรแกรมที่ 6.3 โคตบรรทัดใดที่แสดงถึงการแทนที่ขอมูลคิวดวยลิงคลิสต 2. จงเขียนโปรแกรมใหสมบูรณ และใหชื่อวา QueueUL.pas พรอมคอมไพลโปรแกรมนี้
การเปรียบเทียบประสิทธิภาพการสรางคิวดวยอะเรยและลิงคลิสต
ดวยวิธีทํานองเดียวกับการเปรียบเทียบประสิทธิภาพการสรางสแตกดวยอะเรยและลิงคลิสตดังไดเรียนมาแลวในเรื่องที่ 5.1.5 ของบทเรียนที่ 5 ประสิทธิภาพของการดําเนินงานของคิวท่ีสรางดวยอะเรยและลิงคลิสต ดังแสดงในตาราง 6.1
ตาราง 6.1 เปรียบเทียบประสิทธิภาพของการดําเนินงานของคิวที่สรางดวยอะเรยและลิงคลิสต
การดําเนินงาน สรางดวยอะเรย สรางดวยลิงคลิสต Create O(1) O(1) Enqueue O(1) O(1) Dequeue O(1) O(1) Full O(1) - Empty O(1) O(1) Clear O(1) O(n) Length O(1) O(n)