งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร"— ใบสำเนางานนำเสนอ:

1 รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong

2 หัวข้อวันนี้ Singly-linked list ลิงค์ลิสต์
ชนิดของลิงค์ลิสต์ Singly-linked list ลิงค์ลิสต์ Singly-circularly-linked list ลิงค์ลิสต์วงกลม Doubly-linked list ลิงค์ลิสต์คู่ Doubly-circularly-linked list ลิงค์ลิสต์คู่แบบวงกลม ฟังก์ชันที่เกี่ยวข้อง (จาก operation ของลิงค์ลิสต์) isEmpty() countNode() findTarget()

3 ชนิดของลิงค์ลิสต์ ในการสร้างลิงค์ลิสต์ขึ้นมาใช้งาน อาจมีการปรับปรุงโครงสร้างข้อมูล (structure data type) ของลิงค์ลิสต์ ให้เหมาะสมกับปัญหาบางชนิด, เร่งความเร็วในการทำงานบางฟังก์ชัน Ex. การ insert ข้อมูลบางรูปแบบ ฯลฯ ที่ควรรู้จักมี 4 ชนิดใหญ่ๆ Singly-linked list ลิงค์ลิสต์ Singly-circularly-linked list ลิงค์ลิสต์วงกลม Doubly-linked list ลิงค์ลิสต์คู่ Doubly-circularly-linked list ลิงค์ลิสต์คู่แบบวงกลม

4 Singly-linked list (ลิงค์ลิสต์)
ลิงค์ลิสต์แบบปกติทั่วไป head ไม่มีข้อมูล head มี 1 โหนด 1 head มีหลายโหนด 1 2 3

5 Singly-circularly-linked list (ลิงค์ลิสต์วงกลม)
เปลี่ยน next ของโหนดสุดท้ายให้ชี้ที่โหนดแรก head ไม่มีข้อมูล มี 1 โหนด head 1 มีหลายโหนด 1 2 3 head

6 Doubly-linked list (ลิงค์ลิสต์คู่)
แต่ละโหนดมี 2 ตัวชี้ (next , back) ที่ชี้ไปยังโหนดถัดไป และโหนดก่อนหน้ามัน ตามลำดับ ต้องเปลี่ยนแปลงในส่วนของการประกาศ Structure Data Type นิดหน่อย Singly-linked list Doubly-linked list struct list { int data ; struct list *next ; } ; typedef struct list node ; struct list { int data ; struct list *next ,*back ; } ; typedef struct list node ;

7 เพิ่ม pointer เพื่อชี้กลับไปยังโหนดก่อนหน้า
head ไม่มีข้อมูล head มี 1 โหนด 1 มีหลายโหนด head 1 2 3

8 Doubly-circularly-linked list (ลิงค์ลิสต์สองทางแบบวงกลม)
head Doubly + circularly ไม่มีข้อมูล 1 head มี 1 โหนด มีหลายโหนด 1 head 2 3

9 ไม่ว่าจะออกแบบเป็นลิงค์ลิสต์ชนิดใดก็ตาม แต่ก็ยังต้องคงคุณสมบัติพื้นฐานของลิสต์ตาม ADT ไว้
และต้องเขียนฟังก์ชันเพื่อในการ insert/delete ในรูปแบบที่เหมาะสมกับ application ที่นำไปใช้ ไม่ว่าจะเป็นลิงค์ลิสต์ชนิดใด ก็สามารถมีฟังก์ชันที่ทำงานในรูปแบบเดียวกันได้ นิสิตต้องสามารถเขียนฟังก์ชันเพื่อให้ทำงานตามที่กำหนด ไม่ว่าจะใช้สำหรับลิงค์ลิสต์ชนิดใดก็ได้

10 ฟังก์ชันที่เกี่ยวข้อง (จาก operation ของลิงค์ลิสต์)
กำหนดให้ลิงค์ลิสต์ทุกชนิดมีส่วนที่เป็น data คือข้อมูลชนิด int (ลิงค์ลิสต์ใช้เก็บข้อมูลเลขจำนวนเต็มตามตัวอย่างการประกาศใน PowerPoint หน้า 6) ทุกฟังก์ชันสามารถนำไปเขียนเพื่อใช้งานร่วมกับ ลิงค์ลิสต์ชนิดใดก็ได้ *** ในการนำไปใช้งานจริง อาจมีการเพิ่ม/ลด/เปลี่ยนแปลงบางฟังก์ชัน ขึ้นอยู่กับลักษณะงานที่ใช้ แต่ในคอร์สนี้ จะยกตัวอย่างการทำงาน 9 ฟังก์ชัน

11 insertFirst() – แทรกโหนดใหม่ไว้ลงด้านหน้าลิสต์
insertLast() – แทรกโหนดใหม่ต่อท้ายลิสต์ insert() – แทรกโหนดใหม่ต่อท้ายโหนดที่มีข้อมูลตรงกับที่กำหนด deleteFirst() – ลบ(ดึง)โหนดแรกของลิสต์ออก deleteLast() – ลบ(ดึง)โหนดสุดท้ายของลิสต์ออก delete() – ลบ(ดึง) โหนดที่มีข้อมูลตรงกับที่กำหนดออก isEmpty() – ตรวจสอบว่าลิสต์ว่างหรือไม่ countNode() – นับจำนวนโหนดทั้งหมดในลิสต์ findTarget() – ตรวจสอบว่ามีโหนดที่มีข้อมูลตรงกับที่กำหนดหรือไม่

12 int isEmpty ( node **ptr_head) ;
parameter ชื่อของตัวแปรลิสต์ที่จะตรวจสอบว่าว่างหรือไม่ return value มีได้ 2 สถานะ คือ ว่าง (1) หรือ ไม่ว่าง (0) body of function ตรวจสอบว่าลิสต์ว่างหรือไม่ (*ptr_head == NULL) ถ้าใช่ return 1 , ถ้าไม่ใช่ return 0

13 int countNode ( node ** ptr_head ) ;
parameter ชื่อของตัวแปรลิสต์ที่จะนับจำนวนโหนด return value จำนวนโหนดในลิงค์ลิสต์ body of function นับจำนวนโหนดในลิงค์ลิสต์ ต้องอาศัยการ “ท่อง” ไปในลิงค์ลิสต์ทีละโหนดและนับจำนวน

14 การท่องไปในลิงค์ลิสต์ (traverse)
ลักษณะของการท่องไปในลิงค์ลิสต์ ต้องอาศัยการสร้างตัวแปร pointer ขึ้นมา 1 ตัว เพื่อ “เดิน” ไปตามเส้นทางของลิงค์ลิสต์นั้น data head p p = *ptr_head; while( p->next != NULL) { p = p->next; }

15 int findTarget (node **ptr_head, int target);
parameter ชื่อของตัวแปรลิสต์ที่จะค้นหาข้อมูล ข้อมูลที่ต้องการค้นหา return value มีได้ 2 สถานะ คือ พบ (1) หรือ ไม่พบ (0) body of function ค้นหาข้อมูลที่ต้องการไปทีละโหนดในลิงค์ลิสต์ ต้องอาศัยการ “ท่อง” ไปในลิงค์ลิสต์ ถ้าพบ return 1 , ถ้าไม่พบ return 0

16 void insertFirst ( node **ptr_head, int input ) ;
void insertLast ( node **ptr_head, int input ) ; void insert ( node **ptr_head, int target, int input ) ; int deleteFirst ( node **ptr_head ) ; int deleteLast ( node **ptr_head ) ; int delete ( node **ptr_head, int target ) ; int countNode ( node **ptr_head ) ; int isEmpty ( node **ptr_head) ; int findTarget ( node **ptr_head, int target ) ;


ดาวน์โหลด ppt รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร

งานนำเสนอที่คล้ายกัน


Ads by Google