รายการโยง (linked lists) หอยทอด 30 ข้าวผัด 30 ไก่ย่าง 50 เนื้อทอด 30

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Bansomdej Chaopraya Rajabhat University
Advertisements

Pointers. Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT.
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
ตัวแปรชุด การเขียนโปรแกรมภาษาคอมพิวเตอร์ 1
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
โครงสร้างของโหนด Successor = Node ที่อยู่ถัดไปจาก Node ที่ใช้งานอยู่
บทที่ 6 โครงสร้างข้อมูลลิ้งค์ลิสต์
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงาน.
[][Data][] [][1][]<->[][5][]<->[][3][]<->[][8][null]
บทที่ 6 โครงสร้างข้อมูลลิ้งค์ลิสต์
Introduction to C Programming
สายอักขระและ การประมวลผลสายอักขระ (String and String manipulation)
Lecture No. 3 ทบทวนทฤษฎีและแบบฝึกหัด
Stack.
Stack Holidays/seasonal content.
Structure Programming
Array.
1. จงหาผลลัพธ์จากโปรแกรมต่อไปนี้
Data structure & Algorithms
ลักษณะการทำงานของ Stack
การใช้ PHP ติดต่อกับ Text File
Linked-List (รายการโยง)
Lecture no. 6 Structure & Union
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
Arrays.
คิวQueue Circular Queue.
C Programming Lecture no. 9 Structure.
การควบคุมทิศทางการทำงานของโปรแกรม
อาร์เรย์และข้อความสตริง
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป.
ลิ้งค์ลิสต์วงกลม วิธีการที่ทำให้สามารถวิ่งจาก โหนดหนึ่งจะไม่สามารถชี้กลับไป ยังโหนดอื่น ๆ ได้ในลิ้งค์ลิสต์ โดยให้ตัวชี้ของโหนดสุดท้ายซึ่ง เดิมเป็นค่า NULL.
โครงสร้างข้อมูลแบบคิว
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
แถวลำดับ (array) ง40202 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
Linked List (ลิงค์ลิสต์)
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
บทที่ 5 Link List Link List.
การประมวลผลสายอักขระ
Linked List List is group of nodes that consists of data and link.
คำสั่งควบคุมขั้นตอน Flow control statements
Recursion การเรียกซ้ำ
ลิงค์ลิสต์ (Linked List)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
รายกา ร List 1. ข้าวผัด ข้าวผัดกะเพรา ก๋วยเตี๋ยว ราดหน้า ผัดซี่อิ๊ว ไก่ย่าง ส้มตำ ยำเนื้อย่าง หอยทอด 35.
ตัวแปร Array แบบ 1 มิติ การเขียนโปรแกรมแบบวนซ้ำ
โครงสร้างข้อมูลแบบรายการโยง (Link List)
โครงสร้างข้อมูลแบบลิงก์ลิสต์
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
หน่วยที่ 4 โครงสร้างโปรแกรมภาษาซี
CONDITION Computer Programming Asst. Prof. Dr. Choopan Rattanapoka.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การเขียนโปรแกรม (ภาษาซี)
โครงสร้างข้อมูลแบบ สแตก (stack)
Int isEmpty ( node **ptr_head) ; parameter ชื่อของตัวแปรลิสต์ที่จะตรวจสอบว่า ว่างหรือไม่ return value มีได้ 2 สถานะ คือ ว่าง (1) หรือ ไม่ ว่าง (0) body.
1 สตริง (String) การประกาศค่าตัวแปรสตริง การกำหนดค่าสตริง การอ้างอิงตัวอักษรแต่ละตัวในสตริง ฟังก์ชั่นที่ใช้ในการจัดการสตริง ฟังก์ชั่นในการเปลี่ยนรูปแบบของสตริง.
การเขียนโปรแกรมแบบลำดับ
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
DATA STRUCTURE AND ALGORITHM Linked List.
int isEmpty ( node **ptr_head) ;
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ใบสำเนางานนำเสนอ:

รายการโยง (linked lists) หอยทอด 30 ข้าวผัด 30 ไก่ย่าง 50 เนื้อทอด 30 ข้าวผัด 30 ก๋วยเตี๋ยว 25 ไก่ย่าง 50 ตับย่าง 30 หอยทอด 30 เนื้อทอด 30

list A B C D E โหนดแรก โหนดสุดท้าย โหนด ตัวชี้ ข้อมูล

โหนดสุดท้าย nil nil สำหรับภาษา pascal NULL NULL สำหรับภาษา C

การสร้างโหนดในภาษา c ใช้ตัวแปรโครงสร้าง(structure) ในการกำหนดลักษณะโหนด struct <ชื่อโหนด> { <data type> <variable> ; <data type> <variable> ; ... struct <ชื่อโหนด> *<ตัวแปร> ; } ตัวอย่าง struct node { int info; struct node *link ; } 2 ไบต์ 4 ไบต์ info link ข้อมูล ตัวชี้

ฟังก์ชันขอพื้นที่โหนด ตัวแปรตัวชี้ = malloc(sizeof(จำนวนไบต์)) ขอพื้นที่หน่วยความจำเท่ากับจำนวนไบต์ที่กำหนด โดยมี ตัวแปรตัวชี้ เก็บค่าเลขที่อยู่ของพื้นที่นั้น เช่น struct node *p , *q q = malloc(sizeof(struct node)); p = malloc(sizeof(6)); p q info link info link

การอ้างอิงเพื่อบันทึกข้อมูลในโหนด จะอ้างอิงตัวแปรที่เก็บเลขที่อยู่ของโหนด(ตัวแปรที่ชี้ไปที่โหนด)และชื่อเขตข้อมูล โดยใช้สัญลักษณ์ -> เป็นตัวเชื่อม ตัวแปร->ชื่อเขตข้อมูล q q->link q->info p P->info P->link

P P->info = 51; 51 P P P->link = NULL ; 51 NULL หรือ 51 NULL q q->info = 25; 25 q P 25 51 NULL q->link = p;

การเข้าถึงข้อมูลในโหนดที่โยงกัน list 51 25 89 43 NULL list->info คือ 51 list->link->info คือ 25 list->link->link->info คือ 89 list->link->link->link->info คือ 43

ฟังก์ชันสร้างรายการโยง struct node *insert_node(struct node *list,int x) {struct node *newnode , *p; newnode = malloc(sizeof(struct node)); newnode->info = x; newnode->link = NULL; if(list == NULL) list = newnode; else { p = list ; while(p->link != NULL) p = p->link; p->link = newnode; } return list;

ฟังก์ชันเข้าถึงรายการโยง access_list(struct node *list) { struct node *p; { p = list; while(p != NULL) { printf(“%d \n” ,p->info); p = p->link; } return 0;

ฟังก์ชันตัดโหนดแรกออกจากรายการโยง struct node *delete_node(struct node *list, int *x) { if(list != NULL) { *x = list ->info; if(list->link == NULL)list = NULL; else list = list->link; } return list;

ฟังก์ชันใช้รายการโยงเป็นกองซ้อน struct node *push(struct node *top,int x) { struct node *newnode; newnode = malloc(sizeof(struct node)); newnode->info = x; newnode->link = top; top = newnode; return top; }

รายการโยงเป็นวง(circular link list) NULL A B C D list A B C D list->link

ฟังก์ชันสร้างรายการโยงเป็นวง struct node *insert_clist(struct node *list,int x) {struct node *newnode ; newnode = malloc(sizeof(struct node)); newnode->info = x; if(list == NULL)newnode->link = newnode; else {newnode->link = list->link; list->link = newnode; } list = newnode; return list;

ฟังก์ชันตัดโหนดแรกออกจากรายการโยงเป็นวง struct node *delete_clist(struct node *list, int *x) { if(list != NULL) { *x = list->link->info; if(list == list->link)list = NULL; else list->link = list->link->link; } return list;

การแทรกโหนดต่อจากโหนดใดๆ newnode p … … A B C D p newnode … … A B C D newnode->link = p->link newnode p … … A B C D p->link = newnode

การตัดโหนดที่ต่อจากโหนดใดๆ p … … A B C D p … … A B C D p->link = p->link->link

แบบฝึกหัด list NULL 45 12 38 57 94 list 45 12 38 57 94 1.จงเขียนฟังก์ชันเพื่อนับจำนวนโหนดในรายการโยง 2.จงเขียนฟังก์ชันเพื่อตัดโหนดสุดท้ายออกจากรายการโยง 3.จงเขียนฟังก์ชันเพื่อตัดโหนดในลำดับที่ k ใดๆ(ถ้ามี) ออกจากรายการโยง 4.จงเขียนฟังก์ชันเพื่อนับจำนวนโหนดในรายการโยงเป็นวง 5.จงเขียนฟังก์ชันเพื่อตัดโหนดสุดท้ายออกจากรายการโยงเป็นวง 6.จงเขียนฟังก์ชันเพื่อเปลี่ยนรายการโยงให้เป็นรายการโยงเป็นวงที่มีตัวชี้รายการชี้ที่โหนดสุดท้าย 7.จงเขียนฟังก์ชันเพื่อเปลี่ยนรายการโยงเป็นวงให้เป็นรายการปกติ 8.จงเขียนฟังก์ชันเพื่อกลับทิศทางรายการโยง ตัวอย่าง list NULL 45 12 38 57 94 เมื่อจบฟังก์ชัน list 45 12 38 57 94 NULL