Linked List Lecturer : Kritawan Siriboon, Room no. 913

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
C# เบื้องต้น ก่อนการเขียนเกมด้วย XNA
Advertisements

Computer Programming 1 LAB Test 3
[][Data][] [][1][]<->[][5][]<->[][3][]<->[][8][null]
บทที่ 11 การเขียนโปรแกรมโดยใช้ข้อมูลชนิดพอยท์เตอร์
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
โครงสร้างข้อมูลแบบรายการโยง (Linked Lists) Data Structures and Algorithms อ. ธารารัตน์ พวงสุวรรณ คณะวิทยาศาสตร์และศิลปศาสตร์ มหาวิทยาลัยบูรพา วิทยาเขตสารสนเทศจันทบุรี
Stack.
CS Assembly Language Programming
ฟังก์ชัน (Function).
Structure Programming
1. จงหาผลลัพธ์จากโปรแกรมต่อไปนี้
Data structure & Algorithms
LAB # 4 Computer Programming 1 1. พิจารณาโปรแกรมต่อไปนี้
LAB # 4.
Linked-List (รายการโยง)
Object Oriented Programing
Lecture no. 10 Files System
Javascripts.
การสร้างฟังก์ชั่นเพื่อพัฒนาโปรแกรม Interactive C
คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.
List ADTs By Pantharee S..
บทที่ 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.
Call by reference.
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
โครงสร้างข้อมูลแบบรายการโยง (Link List)
รายการโยง (linked lists) หอยทอด 30 ข้าวผัด 30 ไก่ย่าง 50 เนื้อทอด 30
โครงสร้างข้อมูลแบบลิงก์ลิสต์
Int isEmpty ( node **ptr_head) ; parameter ชื่อของตัวแปรลิสต์ที่จะตรวจสอบว่า ว่างหรือไม่ return value มีได้ 2 สถานะ คือ ว่าง (1) หรือ ไม่ ว่าง (0) body.
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
รายการ (Lis t) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยีคอมพิวเตอร์เคลื่อนที่ คณะเทคโนโลยีสารสนเทศและการสื่อสาร Website : ict.up.ac.th/yeunyong.
หลักการโปรแกรม 1 Lecture 14: โปรแกรมย่อย ( การส่งพารามิเตอร์ แบบ pass by reference)
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
ประเภทของคำสั่งของภาษา SQL
การจัดการและวิเคราะห์ข้อมูล
List, Stack, Queue 2018/9/21.
Object and classes.
รายการ(List) [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Mark Allen Weiss, Addison Wesley
Linked List.
Mark Allen Weiss, Addison Wesley
Queue [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Chapter 9 ตัวชี้ pointer.
Data Structure & Algorithm Concept
Linked List.
int isEmpty ( node **ptr_head) ;
Lecturers : Boontee Kruatrachue. Room no. 913 Kritawan Siriboon
Stack Sanchai Yeewiyom
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Graph Lecturer : Kritawan Siriboon, Boontee Kruatrachue Room no. 913
Chapter 5 การจัดการข้อผิดพลาด (Exception Handling)
Queue [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Chapter 2 ตัวดำเนินการ และนิพจน์.
Linked List (ต่อ) Lecturer : Kritawan Siriboon, Room no. 913
บทที่ 10 การค้นหาข้อมูล (Searching)
โปรแกรมย่อย (Sub Program)
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 05: การวิเคราะห์ความซับซ้อนของ ขั้นตอนวิธีการเรียงลำดับข้อมูล.
Data Structures & Algorithms Using Python
Data Structures & Algorithms Using Python
4 โครงสร้างข้อมูลแบบลิงค์ลิสต์ (LINKED LIST).
Chapter 5: Function.
ใบสำเนางานนำเสนอ:

Linked List Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley

Lists head insert / delete tail คือรายการของของ ของในรายการมีลำดับ การเอาของเข้า/ออก ทำได้ทุกที่ head tail insert / delete Superset of stack & queue

Sequential (Implicit) Array Implementation Problem Logical List : ABCD Physical List insert : shift out B C D tail = 3 delete : shift in B C D

Solve Inserting Problem 3 2 ? Logical Linked List

Solve Deleting Problem 2 p 1

Dynamic Implementation

Address-of Operator & 8 Take the address of the operand. int i = 8; &i ให้ค่า 0013FF60 &i 0013FF60 8 i

Pointer Type Dereference (Indirection) Operator * Pointer keeps the address (instead of normal data). int i = 8; &i ให้ค่า 0013FF60 int *pi = &i; *operand : location that the operand points to *pi is i as long as pi keep &i &i 0013FF60 i 8 *pi 0013FF60 pi

Test1 by Drawing What Happen ? int x = 8; int y = 5; int *p, *q; p = &x; q = &y; *p = *q + x; p = q; What happen ?

Pointer to Dynamic heap location & new function new int จอง (allocates) heap memory ขนาด int และ returns ค่า address ของ memory ที่จองได้ หากจองไม่ได้จะ ruturn ค่า null Heap can only access through pointer ! main() { int i = 8; int *pi = &i; int *q = new int; *q = 5; } stack heap *q 5 q main() pi *pi i 8 What happen? q = &i; Danger! memory leak.

constant null delete function delete p คืน (deallocates) heap memory ที่ชี้โดย p เมื่อ p เป็นตัวแปร pointer เมื่อ delete p ไปแล้ว ไม่ควรเรียก *p เพราะค่าของมันอาจเปลี่ยนไป โดยมีการนำ heap ส่วนนั้นไปใช้อย่างอื่นแล้ว constant null เป็นค่าคงที่สำหรับ pointer ไม่ว่าจะชี้ไปที่ datatype ใด นิยมใช้เป็นค่าตั้งต้น (initialize) ของตัวแปร pointer เช่น char* p = 0; node* = 0; หรือ เป็นค่าปิดท้าย linked list

Test2 by Drawing What Happen ? int *p, *q; p = new int; *p = 8; q = p; cout << *p << *q; *p = 1; *q = *p; q = p; //or q = 0; what happen?

Dynamic Implementation : node & constructor template<class T> class node{ public: T data; node* next; }; template<class T> struct node{ T data; node* next; node(const T& d): data(d),next(0) { } }; node //constructor int main() { node<char> n('A'); n.data = 'B'; n.next = 0; } n A n.data n.next //What happen? node<char> n; n.data = 'A'; n.next = 0;

h template<class T> struct node{ T data; node* next; Dynamic Node template<class T> struct node{ T data; node* next; node(const T& d): data(d),next(0) { } }; node int main() { node<char>* h = new node<char>(‘A'); (*h).data = ‘B'; h->data = ‘C'; } h A B node<char>* h (*h).data (*h).next h->data h->next

Creating Linked List node<char> *h , *t, *p; h = new node<char>(‘A’); t = h; p = new node<char>(‘B’); t->next = p; t = p; Looping to add a new node to the tail. t *h A h B (*t).data (*t).next p t->data t->next

printlist(h) p A template<class T> void printlist(node<T> *p){ while (p) { cout << p->data << ' '; p = p->next; } cout << '\n';

Insert After ? q insertafter(q,d); 3 2 ? insertafter(q,d); node<char> *p = new node<char>(d); p->next = q->next; q->next = p;

node<char> *p = q->next; q->next = p->next; Deleting After q 2 p 1 deleteafter(q); node<char> *p = q->next; q->next = p->next; p->next = 0; return p;

Passing by Value k p 9 *p 8 x 3 i 8 3 5 3 k 8 3 int i = 5; int i = k; int *p = &k; void f() { int k = 8; sth(k); sth(5); Add1(&k); Ad1(k); } void sth(int i){ int x = 3; i = x; } void Add1(int *p){ (*p)++; } //pass data //pass address void Ad1(int& ref){ ref++; } //pass by reference k f( ) Add1( ) p 9 *p 8 x 3 3 sth( ) i 8 3 5 3 k f( ) 8

Pass Address & Passing by Reference int i = 5; int *p = &k; int i = k; void f() { int k = 8; sth(k); sth(5); Add1(&k); Ad1(k); } void sth(int i){ int x = 3; i = x; } void Add1(int *p){ (*p)++; } //pass data int& ref = k; //pass address void Ad1(int& ref){ ref++; } //pass by reference x 3 3 sth( ) i p 8 3 5 3 Add1( ) k f( ) 8 ref k 8 9 10 *p f( )

Passing Parameters Pass data by Value เมื่อไม่ต้องการเปลี่ยน data ใน caller Pass address by Value / Pass data by reference เมื่อต้องการเปลี่ยน data ใน caller Pass data by const & เมื่อไม่ต้องการเปลี่ยน data ใน caller คืออยากจะ pass data by value นั่นเอง แต่ data ที่จะ pass มีขนาดใหญ่ ไม่ต้องการคัดลอกให้เสียเวลา (กรณีเป็นออปเจคต้องเรียก copy constructor ด้วย ทำให้เสียเวลามาก)