1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lecture 08 linked lists(con ) tài liệu Kỹ thuật Lập trình

62 762 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 62
Dung lượng 392,22 KB

Nội dung

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 8/28/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 8/28/14 12.1 Khái niệm danh sách(list) Lấấ y Ngăn xếp Nhập Lấấ y Nhập Hàng đợi List Lấấ y 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 Nhập  Danh sách (list) 8/28/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ế 8/28/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 8/28/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; 8/28/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 8/28/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 8/28/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; typedef int ElementType; // Khai báo kiểu liệu dùng cho ds; typedef struct{ ElementType Elements[MAXSIZE]; // sử dụng mảng để quản lý ds; int last; // biến để quản lý số phần tử ds; }SingleList; SingleList list; 8/28/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 8/28/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; Node* last = NULL; 48 8/28/14 12.6 Double linked List NULL v NULL temp NULL 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 … v đưa vào; last v NULL 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 Cho trỏ previous next temp trỏ đến NULL; Cho first, last trỏ đến temp 49 8/28/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; NULL v NULL last 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 Cho trỏ previous next temp trỏ đến NULL; Cho first, last trỏ đến temp 50 8/28/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 8/28/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 8/28/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 8/28/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 8/28/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 8/28/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ỏ;  Việc thêm bớt phần tử dễ dàng, việc thay đổi mối liên kết trỏ; 56 8/28/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 8/28/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 8/28/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 8/28/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 số chẳn chứa số lẻ 60 8/28/14 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 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 61 8/28/14 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 8/28/14 ... tục; void makeEmptyList(List *list) Lặp lại lệnh xóa phần tử đầu danh sách danh sách rỗng { while(!isEmptyList(list )) deleteAtFirst(list); } 33 8/28/14 Lecture 12 – Linked Lists 12.1 Khái niệm danh... deleteAtLast(*list): Xóa node cuối danh sách; deleteAtPos(*list, pos) : Xóa node danh sách isEmptyList(*list): Kiểm tra danh sách rỗng; makEmptyList(*list): Làm rỗng danh sách; searchList(*list, v): Tìm... first; void insertAtFirst(List *first, DataType info){ Node *temp; temp = (Node*)malloc(sizeof(Node )) ; temp->data = info; temp->next=*first; (*first) = temp; } Gán first node tạo 27 8/28/14 12.4 Danh

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

TỪ KHÓA LIÊN QUAN