Tài liệu Cấu trúc dữ liệu chương 4 pdf

115 333 0
Tài liệu Cấu trúc dữ liệu chương 4 pdf

Đ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

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 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úc dữ 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ấ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 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úc dữ 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ú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 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úc dữ 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

Ngày đăng: 13/12/2013, 07:15

Từ khóa liên quan

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

Tài liệu liên quan