Bài giảng cấu trúc dữ liệu chương 5 nguyễn xuân vinh

20 277 0
Bài giảng cấu trúc dữ liệu  chương 5   nguyễn xuân vinh

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 03/12/2015, 06:41

Từ khóa liên quan

Mục lục

  • Slide 1

  • Review Arrays

  • Linked List (Singly Linked List)

  • Pros and cons

  • Non-linear Linked List (Cấu trúc phi tuyến tính)

  • Classification of Linked List

  • Các phép toán trên Linked List

  • 1) Duyệt

  • 2) Chèn phần tử

  • 3) Xóa phần tử

  • Danh sách liên kết kép (Doubly Linked List)

  • Danh sách liên kết vòng (Circular Linked List)

  • LinkedList Example

  • 1. LinkedList<T>

  • 2. a) Node<T>

  • 2. b) Static inner class Node<T>

  • 2. c) Non-static inner class Node<T>

  • Complexity: Array vs Linked List

  • Tóm tắt

  • HỎI ĐÁP

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan