Lecture 07 linked lists tài liệu Kỹ thuật Lập trình

62 760 0
Lecture 07   linked lists  tài liệu Kỹ thuật Lập trình

Đ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

Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử dụng mảng 12.4 Danh sách liên kết đơn 12.5 Danh sách liên kết dạng vòng 12.6 Danh sách liên kết kép 12.7 Ứng dụng danh sách liên kết 12.8 Bài tập thực hành 5/5/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử dụng mảng 12.4 Danh sách liên kết đơn 12.5 Danh sách liên kết dạng vòng 12.6 Danh sách liên kết kép 12.7 Ứng dụng danh sách liên kết 12.8 Bài tập thực hành 5/5/14 12.1 Khái niệm danh sách(list)  Thực chất, mô hình tốn học danh sách tập hợp hữu hạn phần tử có kiểu với khả nhập xuất liệu rộng cấu trúc liệu kiểu ngăn xếp hay hàng đợi Ngăn xếp L ấ y N h ậ p r a Lấy Nhập Hàng đợi N h ậ p List Danh sách (list) L ấ y r a 5/5/14 12.1 Khái niệm danh sách(list)  Cài đặt:     Ta biểu diễn danh sách chuỗi phần tử nó: a1, a2, , an với n ≥ Nếu n=0 ta nói danh sách rỗng (empty list) Nếu n > ta gọi a1 phần tử (first) an phần tử cuối (last) danh sách Tuy nhiên, cách biểu diễn tồn nhiều hạn chế 5/5/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử dụng mảng 12.4 Danh sách liên kết đơn 12.5 Danh sách liên kết dạng vòng 12.6 Danh sách liên kết kép 12.7 Ứng dụng danh sách liên kết 12.8 Bài tập thực hành 5/5/14 12.2 Các phép toán danh sách  Các phép toán danh sách:    insertToList(list, position, value): thêm phần tử vào vị trí danh sách; deleteFromList(list, position): xóa phần tử từ vị trí cho trước danh sách; makeEmptyList(list): làm rỗng khởi tạo danh sách; 5/5/14 12.2 Các phép toán danh sách  Các hàm bổ trợ:      isEmptyList(list) : kiểm tra danh sách rỗng; searchList(list, value): định vị phần tử có nội dung value danh sách list; printList(list): in danh sách; sortList(list): xếp danh sách; Chú ý: tùy thuộc vào kiểu cài đặt danh sách, xây dựng hàm phép tốn khác 5/5/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử dụng mảng 12.4 Danh sách liên kết đơn 12.5 Danh sách liên kết dạng vòng 12.6 Danh sách liên kết kép 12.7 Ứng dụng danh sách liên kết 12.8 Bài tập thực hành 5/5/14 12.3 Cài đặt danh sách sử dụng mảng MAXSIZE - … first =  last Khai báo (trên ngôn ngữ C) danh sách sử dụng mảng: #define MAXSIZE 100 // Khai báo kích cỡ tối đa ds sử dụng; 5/5/14 12.3 Cài đặt danh sách sử dụng mảng MAXSIZE - … first =  last Một số thao tác cần cài đặt làm việc với danh sách: void insertToList(SingleList *list, int position, ElementType value); void deleteFromList(SingleList *list, int position); void makeEmptyList(SingleList *list); int isEmptyList(SingleList *list); int isFullList(SingleList *list);      10 5/5/14 12.6 Double linked List NULL first last isEmptyList(*list): Kiểm tra danh sách rỗng; makEmptyList(*list): Làm rỗng danh sách; searchList(*list, v): Tìm giá trị danh sách Khởi tạo danh sách: Có thể dùng biến để quản lý đầu vào danh sách cách tạo trỏ first last, ban đầu, gán cho chúng rỗng; int main(){ Node* first = NULL; 5/5/14 48 Node* last = NULL;      12.6 Double linked List NULL NULL v NULL temp   v … v first Thêm phần tử vào đầu danh sách: Trường hợp – ds rỗng: Tạo node temp chứa liệu cần đưa vào; Cho trỏ previous next temp trỏ đến NULL; Cho first, last trỏ đến temp v NULL last NULL last Trường hợp – ds không rỗng: Tạo node temp chứa liệu cần đưa vào; Cho trỏ previous temp trỏ đến NULL; Cho trỏ next temp trỏ đến first; Cho trỏ previous first trỏ đến temp; Cho first trỏ đến temp  49 5/5/14 12.6 Double linked List v NULL … v first   Thêm phần tử vào cuối danh sách: Trường hợp – ds rỗng: Tạo node temp chứa liệu cần đưa vào; Cho trỏ previous next temp trỏ đến NULL; Cho first, last trỏ đến temp NULL v last NULL temp Trường hợp – ds không rỗng: Tạo node temp chứa liệu cần đưa vào; Cho trỏ next last trỏ đến temp; Cho trỏ next temp trỏ đến NULL; Cho trỏ previous temp trỏ đến last; Cho last trỏ đến temp  50 5/5/14 12.6 Double linked List … v curr  v … v Thêm phần tử vào sau vị trí cho trước: Tìm kiếm phần tử curr liền trước vị trí cần thêm vào; Tạo node temp chứa liệu nhập vào; Cho trỏ previous phần tử liền sau curr trỏ đến temp; Cho trỏ next temp trỏ đến phần tử liền sau curr; Cho trỏ previous temp trỏ đến curr; Cho trỏ next curr trỏ đến temp 51 5/5/14 12.6 Double linked List v NULL temp   v … v NULL first Xóa phần tử từ đầu danh sách: Trường hợp – ds có phần tử: Tạo trỏ temp trỏ đến first; Gán first last NULL; Gọi lệnh giải phóng nhớ cho temp Trường hợp tổng quát: Tạo trỏ temp trỏ đến first; Gán first first->next; Gán first->previous NULL; Gọi lệnh giải phóng nhớ cho temp  52 5/5/14 12.6 Double linked List NULL v … v v last  NULL temp Xóa phần tử cuối danh sách Trường hợp tổng quát: Tạo trỏ temp trỏ đến last; Gán last last->previous; Gán last->next NULL; Gọi lệnh giải phóng nhớ cho temp 53 5/5/14 12.6 Double linked List … v curr  v v … temp Xóa phần tử vị trí sau (trước) vị trí cho trước: Tìm phần tử liền trước curr (hoặc liền sau) phần tử cần xóa; Tạo trỏ temp trỏ đến phần tử cần xóa; Gán ((curr->next)->next)->previous curr; Gán curr->next ((curr->next)->next); Gọi lệnh giải phóng nhớ cho temp 54 5/5/14 12.6 Double linked List first v v … v last  Trong thực tế, tổ chức thành danh sách liên kết kép vòng, liên kết next phần tử cuối last trỏ vào phần tử (do first quản lý), liên kết previous phần tử (first) trỏ tới phần tử cuối 55 5/5/14 12.6 Double linked List   Đánh giá cài đặt danh sách trỏ động: Do phần tử ds không nằm liên tiếp nhớ, dẫn đến: Nhược điểm:    Sử dụng nhớ không tối ưu; Việc truy xuất đến phần tử tính nhiều thời gian, thời gian tìm kiếm O(n), với n số phần tử danh sách phải duyệt qua phần tử khác; Ưu điểm:   Tận dụng không gian rỗng nhớ mà ko chứa mảng lớn, liệu phần tử lớn cách tỏ hiệu quả, ngược lại, lãng phí nhớ dành cho trỏ; 56 Việc thêm bớt phần tử dễ dàng, việc thay đổi 5/5/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử dụng mảng 12.4 Danh sách liên kết đơn 12.5 Danh sách liên kết dạng vòng 12.6 Danh sách liên kết kép 12.7 Ứng dụng danh sách liên kết 12.8 Bài tập thực hành 57 5/5/14 12.7 Ứng dụng Linked lists  Trong thực tế, danh sách liên kết sử dụng rộng rãi chương trình máy tính, ví dụ:        Sử dụng danh sách liên kết xây dựng Stack Queue; Biểu diễn cây, đồ thị danh sách liên kết; Biểu diễn ma trận thưa danh sách liên kết; Bài toán đa thức sử dụng danh sách liên kết; Bài toán số lớn sử dụng danh sách liên kết; Xây dựng bảng băm; … 58 5/5/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử dụng mảng 12.4 Danh sách liên kết đơn 12.5 Danh sách liên kết dạng vòng 12.6 Danh sách liên kết kép 12.7 Ứng dụng danh sách liên kết 12.8 Bài tập thực hành 59 5/5/14 12.8 Bài tập thực hành Viết chương trình thêm phần tử danh sách liên kết có thứ tự cho ta có danh sách có thứ tự Viết chương trình tìm kiếm xóa phần tử danh sách liên kết có thứ tự Viết chương trình loại bỏ phần tử trùng (giữ lại phần tử) danh sách liên kết có thứ tự khơng giảm Viết chương trình đảo ngược danh sách liên kết Viết chương trình xóa khỏi danh sách liên kết lưu trữ số nguyên phần tử số nguyên lẻ Viết chương trình tách danh sách liên kết chứa số nguyên thành hai danh sách: danh sách gồm 5/5/14 60 12.8 Bài tập thực hành Ðể lưu trữ số nguyên lớn, ta dùng danh sách liên kết chứa chữ số Hãy tìm cách lưu trữ chữ số số nguyên lớn theo ý tưởng cho việc cộng hai số nguyên lớn dễ dàng thực Viết chương trình cộng hai số nguyên lớn Ða thức P(x)= anxn+ an-1xn-1+ + a1x + a0 lưu trữ máy tính dạng danh sách liên kết mà phần tử danh sách ghi có ba trường lưu giữ hệ số, số mũ, trưòng trỏ để trỏ đến phần tử Chú ý cách lưu trữ đảm bảo thứ tự giảm dần theo số mũ hạng tử đa thức:   Hãy viết khai báo thực lưu trữ Dựa vào cài đặt trên, viết chương trình thực 5/5/14 61 12.8 Bài tập thực hành Ða thức P(x)= anxn+ an-1xn-1+ + a1x + a0 lưu trữ máy tính dạng mảng theo nguyên theo cách sau:   Cách 1: Phần tử mảng lưu trữ bậc n đa thức n + phần tử lưu hệ số từ an đến a0; Cách 2: Phần tử mảng lưu trữ k số hệ số khác 2k phần tử lưu trữ k cặp {hệ số, mũ} tương ứng   Viết chương trình thực việc cộng hai đa thức Viết chương trình tính giá trị lấy đạo hàm đa thức 62 5/5/14 .. .Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử... (first) an phần tử cuối (last) danh sách Tuy nhiên, cách biểu diễn tồn nhiều hạn chế 5/5/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử... sách; Chú ý: tùy thuộc vào kiểu cài đặt danh sách, xây dựng hàm phép tốn khác 5/5/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh sách 12.2 Các phép toán danh sách 12.3 Cài đặt danh sách sử

Ngày đăng: 28/08/2014, 21:58

Từ khóa liên quan

Mục lục

  • Slide 1

  • Slide 2

  • Slide 3

  • Slide 4

  • Slide 5

  • Slide 6

  • Slide 7

  • Slide 8

  • Slide 9

  • Slide 10

  • Slide 11

  • Slide 12

  • Slide 13

  • Slide 14

  • Slide 15

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

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

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

Tài liệu liên quan