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
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.
Advanced Class Design in Java Java Packages Week #6 Jarungjit Parnjai
วิชา 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.
Database & DBMS Architecture วรวิทย์ พูลสวัสดิ์. 2 2 ฐานข้อมูล (Database) - Data and its relation - Databases are designed to offer an organized mechanism.
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
Linked List.
Mark Allen Weiss, Addison Wesley
Queue [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 14 กลวิธีการทดสอบซอฟต์แวร์ (TESTING STRATEGIES)
Data Structure & Algorithm Concept
int isEmpty ( node **ptr_head) ;
Lecturers : Boontee Kruatrachue. Room no. 913 Kritawan Siriboon
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.
การออกแบบระบบ System Design.
Linked List Lecturer : Kritawan Siriboon, Room no. 913
การวัดอัลกอริทึม (Analysis of Algorithm)
Queue [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Problem Solving ขั้นตอนวิธีและการแก้ปัญหาสำหรับวิทยาการคอมพิวเตอร์
Linked List (ต่อ) Lecturer : Kritawan Siriboon, Room no. 913
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 05: การวิเคราะห์ความซับซ้อนของ ขั้นตอนวิธีการเรียงลำดับข้อมูล.
Data Structures and Algorithms 2/2561
4.4 AVL Trees AVL (Adelson-Velskii and Landis) tree เป็น binary search tree กำกับด้วยเงื่อนไขของการสมดุล และประกันว่า depth ของ tree จะเป็น O(log n) อย่างง่ายที่สุดคือกำหนดว่า.
3 โครงสร้างข้อมูลแบบคิว (QUEUE).
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 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

List() สร้าง empty list Unordered List List()  สร้าง empty list isEmpty()  returns boolean ว่า empty list หรือไม่ size()  returns จำนวนของใน list search(item)  returns ว่ามี item ใน list หรือไม่ index(item)  returns index ของ item กำหนดให้ item อยู่ใน list 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 remove(item)  removes & return item คิดว่า item มีอยู่ใน list pop()  removes & return item ตัวสุดท้าย list _size >= 1 pop(pos)  removes & return item ตัวที่ index = pos list _size >= 1

List() สร้าง empty 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 add(item)  adds item เข้า list ตามลำดับ ไม่ Returns remove(item)  removes & return item จาก list คิดว่า item มีอยู่ใน list pop()  removes & return item ตัวสุดท้าย list _size >= 1 pop(pos)  removes & return item ตัวที่ index = pos list _size >= 1

Example Python Code def __init__(self): self.item = [] def size(self): return len(self.item) def isEmpty(self): return self.item == [] def insert(self, i): # insert i เพื่อให้ได้ decending order if self.isEmpty(): self.item.append(i) else: ind = 0 while ind < self.size() and self.item[ind] > i: ind += 1 if ind == self.size() or self.item[ind] != i: self.item.insert(ind,i) self.item[ind] += i

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

List : Sequential (Implicit) Array (Python List) Implementation 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 delete : shift in head A 1 2 3 4 i B C D head 1 2 3 4 A C D B

Implicit (Sequential ) Array (C) 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 - Phyton List Implicit (Sequential ) Array (C) node head 3 head data next A B C D link node Logical linked list Logical คือในความคิดของเรา เช่น link แทนด้วยลูกศร แทนการเชื่อมโยงกัน physical (implementation) โครงสร้างที่ใช้ในการสร้างจริง เช่น link อาจใช้ pointer หรือ index ของ array

Solve Inserting Problem

Solve Deleting Problem

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

Node Class A B C D link head node def getData(self): # accessor next A B C D link node 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 class node(): def __init__(self, data, next = None): self.data = data self.next = next def __str__(self): return str(self.data)

List Class A B C D link head node class list(): data next A B C D link node class list(): """ unordered singly linked list with head """ def __init__(self): self.head = None 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 """ unordered singly linked list with head & tail """ def __init__(self): self.head = self.tail = None

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 self.next = next class list(): """ unordered singly linked list with head """ def __init__(self): self.head = None l = list() head None p def append(self, data): """ add at the end of list""" p = node(data) if self.head == None: # null list self.head = p else: t = self.head while : t = t.next t.next = p t t.next != None

? 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 while p != None print(p) p = p.next } print list head p Design how to call. head p NULL output: B C D while p != None print(p) p = p.next }

Dynamic VS Sequential Array Insertion / Deletion Shifting Problem. Random Access. Automatic Allocation. Lifetime : from defined until its scope finishes. Only keeps data. Solved. Sequential Access. Dynamic Allocation. Lifetime : from allocated by malloc()/new until deallocated by free()/delete. 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