Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
251,68 KB
Nội dung
GV: NGUYỄN XUÂN VINH CẤU TRÚC DỮ LIỆU DATA STRUCTURES [214331] MÔN: CẤU TRÚC DỮ LIỆU DANH SÁCH LIÊN KẾT (Linked List) Nguyễn Xuân Vinh /20 12/3/15 nguyenxuanvinh@hcmuaf.edu.vn GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 Review Arrays Pros Access quickly via array index Easier to use Cons Fixed size: the size of the array is static One block allocation Complex position-based insertion/removal GV: NGUYỄN XUÂN VINH A data structure consisting of a group of nodes which together represent a sequence a linear structure Each node is composed of a data and a reference(*) Allows more efficient insertion or removal of elements from any position in the sequence Reference of the last node point to null Only need to handle the first (head) element /20 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Linked List (Singly Linked List) (*) There might be two references, references can link to previous or next element GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Pros and cons Pros Flexibility: insert/delete from any position in constant time No single allocation of memory needed Dynamic allocation: the size is not required to be known in advance Cons There is no index to query element directly not allow random access to element Complex to use and access No constant time access to the elements /20 12/3/15 Question: How to get the last element in the list? GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 Non-linear Linked List (Cấu trúc phi tuyến tính) Normally, Linked List is a linear data structure However, the complex reference also be a non-linear structure such as Tree, Graph GV: NGUYỄN XUÂN VINH Classification of Linked List Danh sách liên kết đơn (Singly Linked List) /20 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Danh sách liên kết kép (Doubly Linked List) Danh sách liên kết vòng (Circular Linked List) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 Các phép toán Linked List public class Node { private T data; private Node next; public Node(T data, Node next) { this.data = data; this.next = next; } public T getData() { return data; } public void setData(T data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Node(T data) { this.data = data; } } 1) 2) 3) Duyệt phần tử Chèn them phần tử Chèn vào đầu Chèn vào Xóa phần tử Xóa phần tử đầu Xóa phần tử GV: NGUYỄN XUÂN VINH 1) Duyệt Node head = ; Node current = head; while ((current = current.getNext()) != null) { System.out.println(current); /20 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU } GV: NGUYỄN XUÂN VINH 2) Chèn phần tử MÔN: CẤU TRÚC DỮ LIỆU Chèn vào đầu danh sách liên kết /20 12/3/15 Chèn vào danh sách liên kết Xóa phần tử đầu danh sách MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH 3) Xóa phần tử 10 /20 12/3/15 Xóa phần tử danh sách GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 11 Danh sách liên kết kép (Doubly Linked List) Trong danh sách liên kết mà nút có liên kết trỏ, tới nút liền trước, tới nút liền sau Ưu điểm: Có thể duyệt theo hai chiều GV: NGUYỄN XUÂN VINH Danh sách liên kết vòng (Circular Linked List) Trong danh sách liên kết đơn, nút cuối danh sách trỏ tới nút 12 /20 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU A B Ưu điểm: Bất kỳ nút coi đầu danh sách Nhược điểm: Không biết lúc kết thúc danh sách C D E GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 13 LinkedList Example LinkedList Node a) Node in different class b) Static inner class Node c) Non-static inner class Node GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 14 LinkedList public class LinkedList { private Node head; public LinkedList(Node head) { this.head = head; } public Node getHead() { return head; } public void setHead(Node head) { this.head = head; } } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 15 a) Node public class Node { private T data; private Node next; public Node(T data, Node next) { this.data = data; this.next = next; } public T getData() { return data; } public void setData(T data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Node(T data) { this.data = data; } } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 16 b) Static inner class Node public class LinkedList { private Node head; public LinkedList(Node head) { this.head = head; } public Node getHead() { return head; } public void setHead(Node head) { this.head = head; } private static class Node { private T data; private Node next; public Node(T data, Node next) { this.data = data; this.next = next; } } } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU c) Non-static inner class Node public class LinkedList { private Node head; private String name; public LinkedList(Node head) { this.head = head; } public Node getHead() { return head; } public void setHead(Node head) { this.head = head; } private class Node { private T data; private Node next; private String listName; public Node(T data, Node next) { this.data = data; this.next = next; 12/3/15 this.listName = name; } /20 } 17 } GV: NGUYỄN XUÂN VINH Complexity: Array vs Linked List 18 /20 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Operation Array Singly Linked List Indexing O(1) O(n) Insert/Delete at beginning O(n) O(1) Insert/Delete at end O(1) O(n) Insert/Delete in middle O(1) search time + O(1) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /20 19 Tóm tắt Review Arrays Introduce LinkedList Pros and cons Non-linear Linked List Classification of Linked List Các phép toán Linked List Danh sách liên kết kép Danh sách liên kết vòng Cài đặt LinkedList 20 /20 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH HỎI ĐÁP [...]... 12/3/ 15 MÔN: CẤU TRÚC DỮ LIỆU A B Ưu điểm: Bất kỳ nút nào cũng có thể coi là đầu danh sách Nhược điểm: Không biết lúc nào là kết thúc của danh sách C D E GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/ 15 /20 13 LinkedList Example 1 LinkedList 2 Node a) Node in different class b) Static inner class Node c) Non-static inner class Node GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU... data; this.next = next; 12/3/ 15 this.listName = name; } /20 } 17 } GV: NGUYỄN XUÂN VINH Complexity: Array vs Linked List 18 /20 12/3/ 15 MÔN: CẤU TRÚC DỮ LIỆU Operation Array Singly Linked List Indexing O(1) O(n) Insert/Delete at beginning O(n) O(1) Insert/Delete at end O(1) O(n) Insert/Delete in middle O(1) search time + O(1) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/ 15 /20 19 Tóm tắt Review Arrays...GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/ 15 /20 11 Danh sách liên kết kép (Doubly Linked List) Trong danh sách liên kết mà mỗi nút có 2 liên kết trỏ, 1 tới nút liền trước, 1 tới nút liền sau Ưu điểm: Có thể duyệt theo cả hai chiều GV: NGUYỄN XUÂN VINH Danh sách liên kết vòng (Circular Linked List) Trong danh sách liên... Node GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/ 15 /20 14 1 LinkedList public class LinkedList { private Node head; public LinkedList(Node head) { this.head = head; } public Node getHead() { return head; } public void setHead(Node head) { this.head = head; } } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/ 15 /20 15 2 a) Node public class Node { private T data; private... setData(T data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Node(T data) { this.data = data; } } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/ 15 /20 16 2 b) Static inner class Node public class LinkedList { private Node head; public LinkedList(Node head) { this.head = head; } public Node getHead() { return... cons Non-linear Linked List Classification of Linked List Các phép toán trên Linked List Danh sách liên kết kép Danh sách liên kết vòng Cài đặt LinkedList 20 /20 12/3/ 15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH HỎI ĐÁP ... setHead(Node head) { this.head = head; } private static class Node { private T data; private Node next; public Node(T data, Node next) { this.data = data; this.next = next; } } } GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 2 c) Non-static inner class Node public class LinkedList { private Node head; private String name; public LinkedList(Node head) { this.head = head; } public Node getHead() ... MÔN: CẤU TRÚC DỮ LIỆU Chèn vào đầu danh sách liên kết /20 12/3/ 15 Chèn vào danh sách liên kết Xóa phần tử đầu danh sách MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH 3) Xóa phần tử 10 /20 12/3/ 15 Xóa... 12/3/ 15 MÔN: CẤU TRÚC DỮ LIỆU Linked List (Singly Linked List) (*) There might be two references, references can link to previous or next element GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Pros... NGUYỄN XUÂN VINH 1) Duyệt Node head = ; Node current = head; while ((current = current.getNext()) != null) { System.out.println(current); /20 12/3/ 15 MÔN: CẤU TRÚC DỮ LIỆU } GV: NGUYỄN XUÂN VINH