Linked List.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Application Development Overview Nithi Thanon Computer Science Prince of Songkla University.
Advertisements

Lists Data Structure LAUKHWAN NGAMPRASIT LAUKHWAN NGAMPRASIT.
[][Data][] [][1][]<->[][5][]<->[][3][]<->[][8][null]
Data Structures and Algorithms
โครงสร้างข้อมูลแบบรายการโยง (Linked Lists) Data Structures and Algorithms อ. ธารารัตน์ พวงสุวรรณ คณะวิทยาศาสตร์และศิลปศาสตร์ มหาวิทยาลัยบูรพา วิทยาเขตสารสนเทศจันทบุรี
Stack.
Stack Holidays/seasonal content.
แถวคอย (Queue).
Data structure & Algorithms
บรรยายครั้งที่ 3: Queue
Linked-List (รายการโยง)
คิวQueue Circular Queue.
บทที่ 2 Queue Queue.
โครงสร้างข้อมูลแบบคิว
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.
STACK ADT By Pantharee S.. Stack Model  A list with the restriction that insertions deletions can be performed in only one position (LIFO)  Push – insert.
List ADTs By Pantharee S..
การสร้าง WebPage ด้วย Java Script Wachirawut Thamviset.
บทที่ 5 Link List Link List.
Linked List List is group of nodes that consists of data and link.
21 August ดรุณี ศมาวรรตกุล 1 2. ADT List - Unsorted list ADT - list implementation - Sorted List - Circular list - Doubly linked list.
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรอบรมครู คอมพิวเตอร์ หลักสูตรที่ ๑ ทักษะการโปรแกรม เบื้องต้น วันที่สาม.
โครงสร้างข้อมูลแบบรายการโยง (Link List)
Java collection framework
 How do we improve the test?  Why do we have to improve the test?
Int isEmpty ( node **ptr_head) ; parameter ชื่อของตัวแปรลิสต์ที่จะตรวจสอบว่า ว่างหรือไม่ return value มีได้ 2 สถานะ คือ ว่าง (1) หรือ ไม่ ว่าง (0) body.
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
Introduction to Computer Organization and Architecture Flow of Control ภาษาเครื่อง สายงานของการ ควบคุม.
DATA STRUCTURE AND ALGORITHM Linked List.
Linked List (2) Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
รศ. ดร. บุญธีร์ เครือตราชู รศ. กฤตวัน ศิริบูรณ์ KMITL Data Structures & Algorithms : Stack & Queue 1 Stack & Queue Lecturers : Boontee Kruatrachue.
Collections. Data structures Data Structures ( โครงสร้างข้อมูล ) เกิดจากการ นำข้อมูลขั้นพื้นฐานที่แบ่งแยกไม่ได้ (atomic data type) เช่น int, char, double.
QueueQueue Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Linked List ( ต่อ ) Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
Queue Lecturer : Kritawan Siriboon, Room no. 913
ผลที่ได้จากการสอบสวน 1. เกิดเหตุการณ์อะไรขึ้น 2. ทำไมถึงเกิดเหตุการณ์นั้น 3. ใครจะเป็นผู้ที่เหมาะสมที่สุดในการแก้ไขป้องกันอุบัติเหตุในครั้งนี้
List, Stack, Queue 2018/9/21.
Lecturers : Boontee Kruatrachue. Room no. 913 Kritawan Siriboon
รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Mark Allen Weiss, Addison Wesley
Mark Allen Weiss, Addison Wesley
Queue [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 14 กลวิธีการทดสอบซอฟต์แวร์ (TESTING STRATEGIES)
Data Structure & Algorithm Concept
Linked List.
int isEmpty ( node **ptr_head) ;
Lecturers : Boontee Kruatrachue. Room no. 913 Kritawan Siriboon
1. นี่เป็นสิ่งที่พระเยซูทรงทำ พระองค์ทรงรักษาทุกคน ที่เจ็บป่วยให้หายดี
Stack Sanchai Yeewiyom
Tree 2.
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
Linked List Lecturer : Kritawan Siriboon, Room no. 913
การวัดอัลกอริทึม (Analysis of Algorithm)
Queue [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Linked List (ต่อ) Lecturer : Kritawan Siriboon, Room no. 913
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 05: การวิเคราะห์ความซับซ้อนของ ขั้นตอนวิธีการเรียงลำดับข้อมูล.
แล้วไงเกี่ยวกับความจริง What About Truth?
Data Structures and Algorithms 2/2561
ขั้นตอนการเขียนโปรแกรมคอมพิวเตอร์
4.4 AVL Trees AVL (Adelson-Velskii and Landis) tree เป็น binary search tree กำกับด้วยเงื่อนไขของการสมดุล และประกันว่า depth ของ tree จะเป็น O(log n) อย่างง่ายที่สุดคือกำหนดว่า.
Integrated Mathematics
4 โครงสร้างข้อมูลแบบลิงค์ลิสต์ (LINKED LIST).
การวิเคราะห์และออกแบบขั้นตอนวิธี
Stack (Push Down Stack)
ใบสำเนางานนำเสนอ:

Linked List

List List http://www.gograph.com/vector-clip-art/queue.html

List head insert / delete tail To Buy : Bread Milk Eggs Fruit Rice Pasta Butter Juice head tail insert / delete Salmon Already bought Eggs, Rice, Bread, Juice Oh I forgot Salmon

Ordered List – Unordered List To Buy : Bread Milk Eggs Fruit Rice Pasta Butter Juice Unordered List Ordered List Ascending Order Scores : Bruce 2 Tom 3 Ben 5 Max 7 Tim 7 Marry 8 Ron 9 Harry 10 Ordered List Decending Order 98n5 – 4n4 + n3 – 8n2 + 5n + 7

Logical Abstract Data Type & Implementation Logical ADT : ขึ้นกับ application Data : ของมีลำดับ มีปลาย หัว head และ/หรือ ท้าย tail Methods :ขึ้นกับ และ list เป็น ordered list หรือไม่ Data Implementation ? Python List

Unordered List / Ordered List List()  สร้าง empty list isEmpty()  returns boolean ว่า empty list หรือไม่ size()  returns จำนวนของใน list search(item)  returns ว่ามี item ใน list หรือไม่ index(item)  returns index ของ item กำหนดให้ item อยู่ใน list remove(item)  removes & return item คิดว่า item มีอยู่ใน list pop()  removes & return item ตัวสุดท้าย list _size >= 1 pop(pos)  removes & return item ตัวที่ index = pos list _size >= 1 add(item)  adds item เข้า list ไม่ Returns คิดว่า item ไม่มีอยู่ก่อนใน list append(item)  adds item ท้าย list ไม่ Returns คิดว่า item ไม่มีอยู่ก่อนใน list insert(pos,item)  adds item ที่ index pos ไม่ Returns คิดว่า item ไม่มีอยู่ก่อนใน list add(item)  adds item เข้า list ตามลำดับ ไม่ Returns //Ordered List

List Implementation : C Sequential (Implicit) Array, Python List To Buy : A B C D Problem : fix positions i A B C D C : Sequential Array Python : List insert i ? : shift out head A 1 2 3 4 B C D head 1 2 3 4 A B C D None delete : shift in head A 1 2 3 4 i B C D head 1 2 3 4 A C D B None

Implicit (Sequential ) Array (C) Linked List Problem : Fix Positions List Unfix Positions Linked List ลำดับ order? list A B C D 1 2 3 4 data 1 C next 15 data 3 A next 7 data 7 B next 1 data 15 D next - C List Implicit (Sequential ) Array (C) node head 3 head 1 2 3 4 head A B C D None data next A B C D link Python : List node Logical linked list Logical คือในความคิดของเรา เช่น link แทนด้วยลูกศร แทนการเชื่อมโยงกัน physical (implementation) โครงสร้างที่ใช้ในการสร้างจริง เช่น link อาจใช้ pointer หรือ index ของ array

Solve Inserting Problem

Solve Deleting Problem

Linked List Data : data link head node class tail ? list class A B C D next A B C D link node Linked List Data : data link head tail ? node class list class

Node Class / List Class 1. Data : __init__() : constructor ให้ค่าตั้งต้น 2 underscores 2 underscores

Node Class A B C D link tail head node p = node('A', None) class node: data next A B C D link node p p = node('A', None) class node: def __init__(self, data, next = None): def getData(self): # accessor return self.data def getNext(self): # accessor return self.next def setDeata(self, data): # mutator self.data = data def setNext(self, next): # mutator self.next = next self.data = data if next is None: self.next = None else: self.next = next def __str__(self): return str(self.data)

List Class class list: def __init__(self, head = None): """ unordered singly linked list can set default list with head, tail & size """ if head == None: self.head = self.tail = None self.size = 0 else: self.head = head t = self.head self.size = 1 while t.next != None: # locating tail & find size t = t.next self.size += 1 self.tail = t """ unordered singly linked list with head """ def __init__(self): self.head = None l1 = list() """ unordered singly linked list with head & tail """ def __init__(self): self.head = self.tail = None l3 = list(head) l2 = list()

Methods 1. __init__() : ให้ค่าตั้งต้น 6. addHead() : ให้ค่าตั้งต้น 2. size(): 7. remove(item): 3. isEmpty(): 8. removeTail(): 4. append () : add at the end 9. removeHead() : 5. __str__(): 10. isIn(item): / search(item) 11. . . .

Creating a List class node: def __init__(self, data, next = None): self.data = data if next == None: self.next = None else: self.next = next node('A', None) class list: """ unordered singly linked list with head """ def __init__(self): self.head = None def append(self, data): """ add at the end of list""" p = if self.head == None: # null list self.head = p else: t = self.head while : t = t.next t.next = p l = list() self.head None node(data) l.append('A') p self. t.next != None t

? 2 1 Insert After insert node data after a node pointed by q insertAfter(‘i’,q) q 1 2 ? Why insert after ? Can you insert before ?

? 2 1 Delete After delete a node after a node pointed by q deleteAfter(q) q ? 2 p 1

output: B C D p is not None while p != None print(p.data) p = p.next } print list Design how to call. head p NULL output: B C D p is not None while p != None print(p.data) p = p.next }

Linked List VS Sequential Array head 1 2 3 4 Python : List A B C D None Sequential Array Linked List Insertion / Deletion Shifting Problem. Random Access. C array : Automatic Allocation. Python List array : Dynamic Allocation Lifetime : C-array, Python List from defined until its scope finishes. Only keeps data. Solved. Sequential Access. Node : Dynamic Allocation. Node Lifetime : from allocated (C : malloc()/new, python: instantiate obj) until C: deallocated by free()/delete, Python : no reference. Need spaces for linkes.

dummy dummy Dummy Node p “Dummy Node” solves the problem. head head To insert & delete at 1st position change head ie. make special case. p “Dummy Node” solves the problem. dummy head dummy head Empty List has a dummy node.

Why ptr to tail ? Why not ptr to head? Head & Tail Nodes tail head Circular List tail Why ptr to tail ? Why not ptr to head?

Doubly VS Singly Linked List tail head prev data next previous Doubly Circular List tail prev data next

Check if it support every operations. Linked Stack top Check if it support every operations. Linked Queue rear front Can switch front & rear ?

Linked Queue front rear front rear Every operations ? front rear How do they link? Support every operations ? front rear enQueue ? (insert) deQueue ? (delete) Every operations ?

Lab : Bottom Up h I t1 Try to print h2. love h2 you Opps ! Lift it x% Where to Lift_up ? x% I t1 Try to print h2. love h2 you Take the bottom up. Opps ! infinite loop ! very much t2 C++

Lab : Riffle Shuffle h1 h2 h1 h2 4 1 4 1 5 2 5 2 t2 t2 6 3 6 3 7 7 Riffle Shuffle each node of each packet from the top. put the rest at the back of the result packet. 8 8 t1 t1 9 9 Lift up to 2 packets.

Lab : Riffle Shuffle h1 h1 h2 h2 4 1 4 1 5 5 2 2 t2 t2 6 6 3 3 7 7 Riffle Shuffle each node of each packet from the top. put the rest at the back of the result packet. 8 8 t1 t1 9 9 Lift up to 2 packets.

Polynomial Expression Applications Polynomial Expression Multilists Radix Sort

Polynomial expression How about ... ? 5x85 + 7x + 1 x76 - 8 + A=5x3 + 4x2 - 7x + 10 B= x3 + 2x - 8 + C=6x3 + 4x2 - 5x + 2 What data structure will you use? Array? Array? Sparse -> Linked List ( has lots of 0 data )

1. class หนึ่งๆ มีใครลงบ้าง 2. นร. คนหนึ่งๆ ลง class ใดบ้าง Multilists 1. class หนึ่งๆ มีใครลงบ้าง 2. นร. คนหนึ่งๆ ลง class ใดบ้าง C1 C2 C3 C4 s1 s2 s3 s4 s5 1 2 3 0 1 2 3 4 s1 c1 s3 c1 s3 c2 s5 c2 s3 c3 s4 c3 s1 c3 s3 c4 s4 c4

Radix Sort input: 64 8 216 512 27 729 0 1 343 125 1 512 343 64 125 216 27 8 729 0 1 2 3 4 5 6 7 8 9 8 729 1 216 27 512 125 343 64 0 1 2 3 4 5 6 7 8 9 64 27 8 1 125 216 343 512 729 0 1 2 3 4 5 6 7 8 9 output: 0 1 8 27 64 125 216 343 512 729

Radix Sort input: 64 8 216 512 27 729 0 1 343 125 0 1 2 3 4 5 6 7 8 9 64 8 216 512 27 729 1 343 125 0 1 2 3 4 5 6 7 8 9 64 8 216 512 27 729 1 343 125 64 8 216 512 27 729 1 343 125 0 1 2 3 4 5 6 7 8 9 output: 0 1 8 27 64 125 216 343 512 729