Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
5,07 MB
Nội dung
Chương 3 Cấutrúcdữliệu động
*
Nắm vững khái niệm về kiễu dữliệu tĩnh và
động
*
Nắm vững cách tổ chức dữliệuđộng bằng danh
sách liên kết và minh họa được các thao tác xử
lý trên danh sách liên kết đơn
*
Cài đặt minh họa được các thao tác của danh
sách đơn bằng ngôn ngữ C/ C++
*
Cho một mảng có N=8 phần tử
1 2 3 4 5 6 7 8
*
Làm sao để chèn thêm số 6 vào mảng tại vị trí 5
1 2 3 4 5 6 7 8 9
Bổ sung thêm
Giả sử cần thêm tiếp 1 phần tử
?
*
Làm sao để chèn thêm số 6 vào mảng tại vị trí 5
*
Hãy cài đặt hàm (bằng ngôn ngữ C/C++) chèn
một phần tử có giá trị x vào một mảng số
nguyên a, kích thước n (có thứ tự tăng dần) sao
cho mảng a vẫn có thứ tự tăng dần, theo mẫu
hàm như sau:
void ChenX(int a[], int n, int x, int vt);
*
Làm sao để xóa phần tử 9 ?
1 2 3 4 5 6 7 8
*
Làm sao để xóa phần tử 9 ?
1 2 3 4 5 6 7 8
*
Hãy cài đặt hàm (bằng ngôn ngữ C/C++) xóa
phần tử có giá trị x (nếu có) trong mảng số
nguyên a, kích thước n (giả sử giá trị các phần
tử trong mảng không trùng nhau), theo mẫu
hàm như sau:
void XoaX(int a[], int &n, int x);
Độ phức tạp của chèn/ xóa
trên mảng 1 chiều là O(n)
*
Giải quyết vấn đề phức tạp khi chèn/ xóa?
*
Giải quyết vấn đề giới hạn kích thước vùng
nhớ tối đa?
*
Giải quyết vấn đề vùng nhớ không liên tục?
*
Giải quyết vấn đề giải phóng vùng nhớ khi
không cần dùng đến?
DÙNG CẤUTRÚCDỮLIỆU ĐỘNG
[...]...* Biến tĩnh tên biến; Vd: int a; float y; char s[20]; Tồn tại trong phạm vi khai báo Được cấp phát vùng nhớ trong vùng dữliệu Kích thước cố định * Biến động *tên biến; Vd: int *a; float *y; Chứa địa chỉ của một đối tượng dữliệu Được cấp phát hoặc giải phóng bộ nhớ tùy thuộc vào người lập trình Kích thước có thể thay đổi * Biến động Cấp phát bộ nhớ:... khi Thêm/Xóa Chỉ cần thay đổi con trỏ liên kết khi Thêm/Xóa Truy xuất ngẫu nhiên Truy xuất tuần tự Data pNext Cấutrúc 1 node List pHead pTail Data : Dữliệu của node pNext : Con trỏ đến node kế tiếp pHead: Con trỏ đến node đầu pTail: Con trỏ đến node cuối pNext Data struct tNODE { Data; struct tNODE *pNext; }; typedef struct tNODE NODE; 20 pNext struct tNODE { int Data; struct tNODE... *Kiểm tra danh sách rỗng *Thêm 1 nút vào danh sách *Xóa 1 nút *Duyệt danh sách *Tìm 1 phần tử *Sắp xếp danh sách 1 Khai báo thư viện hàm 2 Khai báo cấu trúc danh sách liên kết 3 Khai báo các nguyên mẫu hàm void main() 4 { Tạo lập danh sách rỗng Nhập dữ liệu vào danh sách Các thao tác xử lý trên danh sách Hủy danh sách } 5 Cài đặt các hàm con pHead và pTail chưa xác định List ? ? pHead pTail Trước khi... thôi *Ta cũng có thể quản lý danh sách bằng cách sử dụng thêm con trỏ cuối (pTail) *pTail không phải là 1 nút, nó chỉ là “con trỏ chỉ đến nút” mà thôi *Tạo lập bằng cách cấp phát bộ nhớ động *Mỗi nút có 2 thông tin: *Dữ liệu (data) *Con trỏ liên kết đến phần tử kế tiếp trong danh sách (Next pointer link) *Nếu không trỏ đến phần tử nào thì con trỏ Next = NULL *“Kết nối” lại sợi dây liên kết theo trình... * Biến động Cấp phát bộ nhớ: new int [kích thước] Giải phóng bộ nhớ: delete vùng nhớ Ví dụ: int *a; a=new int [10]; // Cấp phát //Các thao tác trên a ……………… delete a; // Giải phóng *Giới thiệu cấu trúc “Danh sách liên kết” 1 7 2 6 3 10 8 5 9 4 Các phần tử kết dính với nhau bằng “sợi dây liên kết” 1 7 2 6 3 10 8 5 9 4 Để đơn giản hơn trong việc minh họa *Một dãy tuần tự các nút (Node) *Giữa hai . Chương 3 Cấu trúc dữ liệu động
*
Nắm vững khái niệm về kiễu dữ liệu tĩnh và
động
*
Nắm vững cách tổ chức dữ liệu động bằng danh
sách. đề giải phóng vùng nhớ khi
không cần dùng đến?
DÙNG CẤU TRÚC DỮ LIỆU ĐỘNG
*
Biến tĩnh
<kiểu dữ liệu& gt; tên biến;
Vd: int a; float y; char s[20];
Tồn