CẤU TRÚC DỮ LIỆU - Chương 6: DANH SÁCH (LIST)
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
CẤU TRÚC DỮ LIỆU - Chương 6: DANH SÁCH (LIST) Môn: CẤU TRÚC DỮ LIỆU Chương 6: DANH SÁCH (LIST) 4. Danh sách liên kết (Linked List) 4. 4.1. Định nghĩa 4.2. Danh sách liên kết đơn (Simply Linked List) 4.3. Danh sách liên kết kép (Doubly Linked List) 4.4. Danh sách liên kết vòng 4.5. Ưu nhược điểm của danh sách liên kết 4. Danh sách liên kết (tt) 4. 4.1. Định nghĩa Là tập hợp các phần tử mà giữa chúng có một sự nối kết với nhau thông qua vùng liên kết của chúng. Tùy cách liên kết giữa các phần tử, danh sách liên kết chia thành các loại khác nhau: ◦ Danh sách liên kết đơn ◦ Danh sách liên kết đôi/kép ◦ Danh sách đa liên kết ◦ Danh sách liên kết vòng (vòng đơn, vòng đôi) Mỗi loại danh sách có cách biểu diễn theo các cấu trúc dữ liệu và thao tác trên dữ liệu khác 4.2. Danh sách liên kết đơn (SLL) 4.2. Danh s 4.2. Danh sách liên kết đơn (SLL) 4.2. Danh s 4.2.1. Cấu trúc dữ liệu Nội dung mỗi phần tử (nút) trong danh sách liên kết gồm 2 vùng Vùng dữ liệu và Vùng liên kết struct node { int data; node *link; // liên kết đến vùng của phần tử kế tiếp }; data link 4.2. Danh sách liên kết đơn (SLL) 4.2. Danh s 4.2.1. Cấu trúc dữ liệu 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.1. Cấu trúc dữ liệu (tt) Để quản lý danh sách liên kết có thể dùng nhiều phương pháp khác nhau, mỗi phương pháp sẽ có cấu trúc dữ liệu cụ thể. ◦ Quản lý địa chỉ phần đầu và cuối danh sách struct List { Node *pHead; Node *pTail; }; pHead info pNext pTail 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.1. Cấu trúc dữ liệu (tt) 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2. Các thao tác trên danh sách liên kết đơn a. Khởi tạo danh sách SLL b. Tạo mới 1 phần tử (nút) trong danh sách SLL c. Thêm 1 phần tử vào danh sách SLL Thêm vào đầu | cuối | giữa danh sách liên kết đơn d. Duyệt qua các nút trong danh sách e. Tìm kiếm phần tử trong danh sách f. Hủy bỏ 1 phần tử trong danh sách g. Hủy danh sách h. Tạo mới danh sách/Nhập danh sách i. Tách 1 danh sách thành nhiều danh sách j. Nhập nhiều danh sách thành 1 danh sách k. Sắp xếp thứ tự các phần tử trong danh sách 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2. Các thao tác trên danh sách liên kết đơn: Giả sử ta có các định nghĩa sau: struct node{ int data; node *link; }; struct List{ node *pHead; node *pTail; }; node *p; List l; 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2.a. Khởi tạo danh sách SLL Thao tác khởi tạo danh sách liên kết đơn là cho giá trị con trỏ quản lý địa chỉ đầu của danh sách về con trỏ NULL. Hàm khởi tạo danh sách liên kết đơn: void Init(node *pHead) { pHead = NULL; return; } 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2. b. Tạo mới 1 phần tử (nút) trong danh sách SLL Giả sử tạo mới 1 phần tử có thành phần dữ liệu =x Thuật toán B1: p = new node //cấp phát bộ nhớ cho con trỏ p B2: IF(p == NULL) // cấp phát không thành công Thực hiện BKT B3: p->data=x; B4: p->link=NULL BKT: Kết thúc 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s (Hàm tạo node) node* get_node(int n){ Node *p; p=new node; //p=(struct node *)malloc(sizeof(struct node)); if (p==NULL) { cout4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2.c. Thêm 1 phần tử vào danh sách SLL (Thêm đầu DS) 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2.c. Thêm 1 phần tử vào danh sách SLL (Thêm đầu DS) Thuật toán Gỉa sử ta muốn thêm phần tử p vào đầu DS: Nếu DS rỗng thì: pHead=p; pTail=pHead; // pTail=new_element Ngược lại: p->link=pHead; pHead=p; 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s Cài đặt void insert_head(list &l, node *p){ if (l.pHead==NULL){ l.pHead=p; l.pTail=p; } else{ p->link=l.pHead; l.pHead=p; } } 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s Như vậy một danh sách bằng cách chèn đầu ta có thể viết hàm như sau: void create_list_head(list &l, int n) { node *p; for (int i=1;i4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2.c. Thêm 1 phần tử vào danh sách SLL (tt) (Thêm giữa DS) 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2.c. Thêm 1 phần tử vào danh sách SLL (tt) (Thêm giữa DS) 4.2. Danh sách liên kết đơn (tt) 4.2. Danh s 4.2.2.c. Thêm 1 phần tử vào danh sách SLL (tt) (Thêm giữa DS) Thêm phần tử mới vào ngay sau phần tử q Thuật toán Nếu q!=NULL; B1: p->link=q->link; B2: q->link=p Ngược lại: thêm vào đầu DS
Tìm kiếm theo từ khóa liên quan:
Danh sách liên kết Cấu trúc dữ liệu quản lý danh sách Sắp xếp phần tử Tìm kiếm phần tử giá trị con trỏGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 318 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 163 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 150 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 139 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 124 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 74 0 0 -
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 1
338 trang 73 0 0 -
49 trang 72 0 0
-
54 trang 70 0 0
-
Bài giảng Cơ sở dữ liệu: Chương 3 - ThS. Hoàng Mạnh Hà
67 trang 70 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Phần 1 - ThS. Hoàng Thế Phương
128 trang 67 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ngô Công Thắng
8 trang 66 0 0 -
Giáo trình Cấu trúc dữ liệu và giải thuật: Phần 2 - Lê Văn Vinh
67 trang 57 1 0 -
Giáo trình CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT - Chương 1
5 trang 51 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - ThS. Trịnh Quốc Sơn (ĐH Công nghệ Thông tin)
20 trang 50 0 0 -
Cấu trúc dữ liệu và Ngôn ngữ lập trình C
261 trang 44 0 0 -
Đề kiểm tra giữa học kì 1, môn : Cấu trúc dữ liệu và giải thuật
3 trang 42 1 0 -
514 trang 35 0 0
-
Phân tích cấu trúc dữ liệu: Phần 1
142 trang 35 0 0