Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 115 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
115
Dung lượng
590 KB
Nội dung
1 Môn: CẤUTRÚCDỮLIỆUChương 4: DANH SÁCH (LIST) 2 NỘI DUNG CHƯƠNG4 1. Khái niệm danh sách 2. Các phép toán trên danh sách 3. Danh sách đặc Định nghĩa Biểu diễn danh sách đặc Các thao tác trên danh sách đặc Ưu nhược điểm và ứng dụng 4. Danh sách liên kết Định nghĩa Danh sách liên kết đơn Danh sách liên kết kép Ưu nhược điểm của danh sách liên kết 5. Danh sách hạn chế Hàng đợi Ngăn xếp Ứng dụng của danh sách hạn chế BÀI TẬP 3 1. Khái niệm danh sách Danh sách a 1 , a 2 , ….a N là tập hợp các phần tử có kiểu dữliệu xác định và giữa chúng có 1 mối quan hệ nào đó. Nếu biết phần tử a i vị trí của phần tử a i+1 Số phần tử trong một danh sách là chiều dài của 1 danh sách. Danh sách rỗng là danh sách có chiều dài = 0 Cho T là một kiểu được định nghĩa trước, kiểu danh sách T X gồm các phần tử thuộc kiểu T được định nghĩa là: T X = < V X , O X > Trong đó : V X = { tập hợp các thứ tự gồm một số biến động các phần tử kiểu T }. O X = { tạo danh sách; tìm 1 phần tử trong danh sách; chèn 1 phần tử vào danh sách; huỷ 1 phần tử khỏi danh sách; liệt kê danh sách, sắp xếp danh sách.}. 4 2. Các phép toán trên danh sách Tùy theo loại của từng danh sách sẽ có các phép toán khác nhau, các phép toán thông thường như sau: 2.1. Tạo mới 1 danh sách Đưa vào danh sách nội dung các phần tử. Chiều dài của danh sách là xác định. 2.2. Thêm 1 phần tử vào danh sách Khi thêm 1 phần tử chiều dài danh sách tăng lên. Có thao tác thêm vào đầu, cuối hay tại 1 vị trí xác định của danh sách. 2.3. Tìm kiếm 1 phần tử trong danh sách Tìm 1 phần tử trong danh sách thỏa mãn điều kiện nào đó Dùng các thuật toán tìm kiếm trong chương “Tìm kiếm” 2.4. Loại bớt 1 phần tử trong danh sách Chiều dài danh sách giảm xuống 1 phần tử Công việc loại bớt cũng bao gồm thao tác tìm kiếm ra phần tử cần hủy trong danh sách. 5 2. Các phép toán trên danh sách (tt) 2.5. Sửa đổi giá trị 1 phần tử trong danh sách Thay đổi thông tin của 1 phần tử trong danh sách Công việc cập nhật phần tử cũng bao gồm thao tác tìm kiếm ra phần tử cần hủy trong danh sách. 2.6. Sắp xếp danh sách Dùng các thuật toán trong chương sắp xếp. 2.7. Tách danh sách thành nhiều danh sách con Tách danh sách thành các DS con theo 1 quy luật chia nào đó Tổng chiều dài các danh sách được chia bằng chiều dài danh sách ban đầu 2.8. Nhập nhiều danh sách thành 1 danh sách Nhập các danh sách thành 1 danh sách Tổng chiều dài danh sách bằng tổng chiều dài các danh sách ban đầu Có thể ghép đuôi các danh sách hay trộn lẫn theo 1 phương pháp nhất định 2.9. Sao chép 1 danh sách: Sao chép toàn bộ nội dung của danh sách thành 1 danh sách khác. 2.10. Hủy danh sách: Huỷ nội dung hay cả vùng nhớ chứa DS 6 3. Danh sách đặc (Condensed List) 3.1. Định nghĩa Danh sách đặc là danh sách mà không gian bộ nhớ lưu trữ các phần tử nằm kề cận nhau trong bộ nhớ. 3.2. Biểu diễn danh sách đặc Biểu diễn danh sách đặc dùng 1mảng các phần tử có kiểu dửliệu là kiểu dữliệu của các phần tử trong danh sách Cần biết chiều dài tối đa của một danh sách đặc thông qua 1 biến. Cần biết chiều dài thực của một danh sách đặc thông qua 1 biến. VD:#define MaxLength 1000 int RealLength; T CD_List[MaxLength] Hay: T * CD_List = new T[MaxLength] 7 3. Danh sách đặc (tt) 3.3. Các thao tác trên danh sách đặc Một số thao tác trên danh sách đặc được thống kê tóm tắt: 3.3.1. Khởi tạo danh sách Khởi tạo danh sách cho chiều dài danh sách trở về 0. void CD_Initialize(int &Len) { Len = 0; return; } 8 3. Danh sách đặc (tt) 3.3. Các thao tác trên danh sách đặc (tt) 3.3.2. Tạo danh sách mới & nhập danh sách Tạo danh sách mới có chiều dài tối đa MaxLen, hàm trả về giá trị thực của danh sách mới được tạo. int CD_Create_List(T M[], int &Len) { if (Len > MaxLen) Len = MaxLen; for (int I = 0; i< Len;I++) M[I] = InputOneElement(); return (Len); } T InputOneElement() { …} 9 3. Danh sách đặc (tt) 3.3. Các thao tác trên danh sách đặc (tt) 3.3.3. Thêm 1 phần tử vào danh sách Thêm 1 phần tử có giá trị NewValue vào trong danh sách có chiều dài Length tại vị trí InsPos B1: IF (Length = MaxLen) Thực hiện BKT B2: Pos = Length+1 B3: IF(Pos = InsPos) Thực hiện B7 B4: M[Pos] = M[Pos -1] B5: Pos-- B6: Lặp lại B3 B7:M[InsPos] = NewValue B8: Length++ BKT: Kết thúc 10 3. Danh sách đặc (tt) 3.3. Các thao tác trên danh sách đặc (tt) 3.3.3. Thêm 1 phần tử vào danh sách (tt) int CD_InsertElement(T M[], int &Len, T NewValue, int InsPos) { if (Len == MaxLen) return (-1); for (int I = Len; I >InsPos; I++) M[I] = M[I-1]; M[InsPos] = NewValue; Len++; return (Len); } [...]... 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úcdữliệu và thao tác trên dữliệu khác nhau 26 4. 2 Danh sách liên kết đơn (SLL) 4. 2.1 Cấutrúcdữ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 typedef struct SLLNode { T Key; InfoType Info; SLLNode *NextNode; // liên kết đến vùng... qua vị trí khác Được ứng dụng nhiều trong cấu trúcdữliệu mảng (mảng 1 chiều, mảng nhiều chiều, mảng cấp phát tĩnh, mảng cấp phát động) 24 4 Danh sách liên kết (Linked List) 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 Ưu nhược điểm của danh sách liên kết 25 4 Danh sách liên kết (tt) 4. 1 Định nghĩa Danh sách liên kết là tập hợp... SLLType; 27 4. 2 Danh sách liên kết đơn (tt) 4. 2.1 Cấu trúcdữ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úcdữliệu cụ thể Quản lý địa chỉ phần đầu danh sách SLLType SLList1; Quản lý địa chỉ phần đầu và cuối danh sách typedef struct SLL_PairNode { SLLType SLLFirst; SLLType SLLLase; } SLLPType; SLLPType SLLList2; 28 4. 2 Danh sách... SLLType SLLLase; } SLLPType; SLLPType SLLList2; 28 4. 2 Danh sách liên kết đơn (tt) 4. 2.1 Cấu trúcdữliệu (tt) Quản lý địa chỉ phần đầu, cuối và số phần tử của danh sách typedef struct SLL_PairNNode { SLLType SLLFirst; SLLType SLLLase; unsigned NumNode; } SLLPNType; SLLPNType SLLList3; 29 4. 2 Danh sách liên kết đơn (tt) 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... ->NextNode = NULL; Pnode ->Key = NewData; } return Pnode; } 33 4. 2 Danh sách liên kết đơn (tt) 4. 2.2.c Thêm 1 phần tử vào danh sách SLL (Thêm đầu DS) Thuật toán B1: NewNode = SLLCreateNode(NewData) B2: If (NewNode == NULL) Thực hiện BKT B3: NewNode->NextNode = SSList B4: SLList = NewNode BKT: Kết thúc 34 4.2 Danh sách liên kết đơn (tt) 4. 2.2.c Thêm 1 phần tử vào danh sách SLL (Thêm đầu DS) (tt) Cài... kết đơn (tt) 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 = NewData Thuật toán B1: First = new SLLOneNode B2: IF(First == NULL) Thực hiện BKT B3: First->NextNode = NULL; B4: First ->Key = NewData BKT: Kết thúc 32 4. 2 Danh sách liên kết đơn (tt) 4. 2.2 b Tạo mới 1 phần tử (nút) trong danh sách SLL (tt) Cài đặt Prototype: SLLType SLLCreateNode(T NewData)... tử trong danh sách h Sao chép 1 danh sách 30 4. 2 Danh sách liên kết đơn (tt) 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 SLLInitialize(SLLType &First) { First = NULL; return; } 31 4. 2 Danh sách liên kết đơn (tt) 4. 2.2 b Tạo mới 1 phần tử (nút) trong danh sách... SList = NewNode; return (SList); } 35 4. 2 Danh sách liên kết đơn (tt) 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 nút có địa chỉ InsNode Thuật toán B1: NewNode = SLLCreateOneNode(NewData) B2: IF (NewNode == NULL) Thực hiện BKT B3: IF(InsNode ->NextNode == NULL) B3.1: InsNode->NextNode = NewNode B3.2: Thực hiện BKT B4: NewNode->NextNode = InsNode->NextNode... B2:IF(SLen2 >= Len) SLen2 = Len SLen1 = 0 B3: IF(SLen1 + SLen2 Len) SLen2 = Len – SLen1 B4: IF (SLen1 < 0) SLen1 = 0 B5: IF (SLen2 < 0) SLen2 = 0 B6: I =1, SI = 1 B7: IF (I > SLen1) Thực hiện B11 B8: SM[SI] = M[I] B9: I++, SI++ B10: Lặp lại B7 B11: SI = 1 B12: IF(I > Len) Thực hiện BKT B13: SM2[SI] = M[I] B 14: I++, SI++ B15: Lặp lại B12 17 3 Danh sách đặc (tt) 3.3 Các thao tác trên danh sách đặc (tt)...3 Danh sách đặc (tt) 3.3 Các thao tác trên danh sách đặc (tt) 3.3 .4 Tìm kiếm 1 phần tử trong danh sách Dùng các thuật toán tìm kiếm tìm phần tử thỏa mãn điều kiện trong danh sách Tìm kiếm tuyến tính Tìm nhị phân 11 3 Danh sách đặc (tt) 3.3 Các thao tác trên danh . 1 Môn: CẤU TRÚC DỮ LIỆU Chương 4: DANH SÁCH (LIST) 2 NỘI DUNG CHƯƠNG 4 1. Khái niệm danh sách 2. Các phép toán trên. sách đặc Biểu diễn danh sách đặc dùng 1mảng các phần tử có kiểu dử liệu là kiểu dữ liệu của các phần tử trong danh sách Cần biết chiều dài tối đa của