data structure lesson06

14
!"! แผนการสอนประจําบทเรียน รายชื ่ออาจารยผู จัดทํา ไกรสร วงศพราวมาศ และ สุณี รักษาเกียรติศักดิ์ หัวขอของเนื้อหา ตอนที่ 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. ในการสรางคิว ผู สรางสามารถเลือกใชการแทนที ่ขอมูลของคิวแบบอะเรยหรือลิงคลิสตก็ได

description

ตอนที่ 6.2 การประยุกตใชคิว เรื่องที่ 6.2.1 ระบบการใหบริการตาง ๆ แผนการสอนประจําบทเรียน รายชื่ออาจารยผูจัดทํา ไกรสร วงศพราวมาศ และ สุณี รักษาเกียรติศักดิ์ หัวขอของเนื้อหา ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน เอกสารประกอบการสอน 1. เอกสารชุดวิชา หัวเรื่อง เรื่องที่ 6.1.1 การกําหนดคุณลักษณะเฉพาะของคิว เรื่องที่ 6.1.2 การสรางคิวดวยอะเ

Transcript of data structure lesson06

Page 1: 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. ในการสรางคิว ผูสรางสามารถเลือกใชการแทนท่ีขอมูลของคิวแบบอะเรยหรือลิงคลิสตก็ได

Page 2: data structure lesson06

!"#

9. ในการใชชนิดขอมูลแบบคิว ผูใชเพียงแตใชตามคุณลักษณะเฉพาะที่ออกแบบใชเทานั้น ไมตองสนใจวาผูสรางจะเลือกการแทนที่ขอมูลของคิวอยางไร และสรางมาดวยวิธีการอยางไร

วัตถุประสงค หลักจากศึกษาบทเรียนที่ 6 แลว นักศึกษาสามารถ 1. บอกถึงคุณลักษณะเฉพาะของคิวได วาคิวมีชนิดขอมูลสมาชิกเปนอยางไร มีโครงสรางขอมูลอยางไร และสามารถดําเนินงานอะไรกับคิวไดบาง

2. สรางคิวโดยใชการแทนที่ขอมูลแบบอะเรยได 3. สรางคิวโดยใชการแทนที่ขอมูลแบบลิงคลิสตได 4. บอกตัวอยางการประยุกตใชคิวในสาขาวิทยาการคอมพิวเตอรได

กิจกรรมการเรียนการสอน กิจกรรมท่ีนักศึกษาตองทําสําหรับการเรียนการสอน ไดแก 1. ศึกษาเอกสารชดุวิชา/โฮมเพจชุดวิชา ตอนที่ 6.1 และตอนที ่6.2 2. ทํากิจกรรมของบทเรียนที่ 6 3. ทําแบบประเมินผลของบทเรียนที่ 6

เอกสารประกอบการสอน 1. เอกสารชดุวิชา

สื่อการสอน 1. โฮมเพจชุดวิชา 2. สไลดประกอบการบรรยาย (Powerpoint) 3. โปรแกรมคอมพิวเตอร

ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน

Page 3: data structure lesson06

!"$

ตอนท่ี 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 สวนใหญๆ คือ - การกําหนดวาสมาชิกขอมูลของคิวที่ใชมีชนิดขอมูลเปนอะไร - การกําหนดวาสมาชิกของคิวมีโครงสรางหรือความสัมพันธกันอยางไร - การกําหนดวาเราสามารถดําเนินงานอะไรกับคิวไดบาง โดยรายละเอียดของคุณลักษณะเฉพาะของคิวจะเปนดังน้ี

Page 4: data structure lesson06

!"%

คุณลักษณะเฉพาะ 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 จะเปนจํานวนสมาชิกในคิว

Page 5: data structure lesson06

!"&

ตัวอยาง 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)

Page 6: data structure lesson06

!"'

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

Page 7: data structure lesson06

!"(

↑ ↑ Head Tail

ภาพประกอบ 6.1 ภาพแสดงการนําสมาชิกเขาและออกจากคิวที่สรางดวยอะเรย

Page 8: data structure lesson06

!")

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

Page 9: data structure lesson06

!"*

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 ไดแสดงคิววงกลม

Page 10: data structure lesson06

!!"

ภาพประกอบ 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

{*********}

Page 11: data structure lesson06

!!!

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 พรอมคอมไพลโปรแกรม

Page 12: data structure lesson06

!!#

เรื่องที่ 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

Page 13: data structure lesson06

!!$

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 การสรางคิวดวยลิงคลิสต

Page 14: data structure lesson06

!!%

กิจกรรม 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)