Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 191 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
191
Dung lượng
2,86 MB
Nội dung
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng TRƯỜNG ĐH CÔNG NGHỆ THÔNG TIN ÔN THI CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giáo viên: Mai Xuân Hùng Email: hungmx@uit.edu.vn CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Nội Dung ➢ Các thuật tốn tìm kiếm xếp tập áp dụng ➢ Giới thiệu cấu trúc liệu động ➢ Danh sách liên kết đơn tập áp dụng ➢ Cây nhị phân tìm kiếm tập áp dụng Bài Tốn Tìm Kiếm CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng ➢ Cho danh sách có n phần tử a0, a1, a2…, an-1 ➢ Để đơn giản việc trình bày giải thuật ta dùng mảng chiều a để lưu danh sách phần tử nói nhớ ➢ Tìm phần tử có khố X mảng ▪ Giải thuật tìm kiếm tuyến tính (tìm tuần tự) ▪ Giải thuật tìm kiếm nhị phân ❖ Lưu ý: Trong trình trình bày thuật giải ta dùng ngơn ngữ lập trình C CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xn Hùng Tìm Kiếm Tuyến Tính ➢ Ý tưởng : So sánh X với phần tử thứ 1, thứ 2,…của mảng a gặp khóa cần tìm, tìm hết mảng mà khơng thấy ➢ Các bước tiến hành • • • Bước 1: Khởi gán i=0; Bước 2: So sánh a[i] với giá trị x cần tìm, có khả + a[i] == x tìm thấy x Dừng; + a[i] != x sang bước 3; Bước 3: i=i+1 // Xét tiếp phần tử mảng Nếu i==N: Hết mảng Dừng; Ngược lại: Lặp lại bước 2; Thuật Toán Tìm Kiếm Tuyến Tính CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng ➢ Hàm trả tìm thấy, ngược lại trả int LinearSearch(int a[],int n, int x) { int i=0; while((ikey); NLR(t->pLeft); NLR(t->pRight); } } 180 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Bài tập cho phần duyệt Viết chương trình thực yêu cầu sau: Đếm số nút Tình tổng tất khóa Đếm số nút Đếm số nút có Đếm số nút có Cho biết khoá lớn Cho biết khóa nhỏ 181 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Viết hàm đếm số nút void Dem(TREE t,int &s) { if(t!=NULL) { s++; Dem(t->pLeft,s); Dem(t->pRight,s); } } 182 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Lời gọi hàm void main() { TREE t; int s=0; Dem(t,s); printf(“so nut cay :=%d”,s); } 183 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng 10 ➢ NLR: 9, 2, 6, 1, 10, 8, 5, 3, 7, 12, ➢ LNR: 6, 2, 10, 1, 9, 3, 5, 8, 12, 7, 184 12 Hủy nút có khố X CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng ➢ Hủy phần tử phải đảm bảo điều kiện ràng buộc Cây nhị phân tìm kiếm ➢ Có trường hợp hủy nút ▪ TH1: X nút ▪ TH2: X có (cây trái phải) ▪ TH3: X có đầy đủ ➢ TH1: Ta xố nút mà khơng ành hưởng đến nút khác ttrên ➢ TH2: Trước xố x ta móc nối cha X với cùa X ➢ TH3: Ta dùng cách xoá gián tiếp 185 Minh hoạ hủy phần tử x có CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Hủy X=37 44 18 13 88 59 37 15 23 55 186 108 71 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Hủy nút có ➢ Ta dùng cách hủy gián tiếp, X có ➢ Thay hủy X ta tìm phần tử mạng Y Nút Y có tối đa ➢ Thông tin lưu nút Y chuyển lên lưu X ➢ Ta tiến hành xoá hủy nút Y (xoá Y giống trường hợp đầu) ➢ Cách tìm nút mạng Y cho X: Có cách C1: Nút Y nút có khố nhỏ (trái nhất) bên phải X ▪ C2: Nút Y nút có khố lớn (phải nhất) bên trái X ▪ 187 Minh họa hủy phần tử X có CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Xoá nút có trường 44 Key = 18, lúc nút có khố 23 nút mạng 18 13 88 59 37 15 23 40 55 30 188 108 71 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Cài đặt thao tác xố nút có trường Key = x void DeleteNodeX1(TREE &T,int x) { if(T!=NULL) { if(T->KeyRight,x); else { if(T->Key>x) DeleteNodeX1(T->Left,x); else //tim thấy Node có trường liệu = x { TNode *p; p=T; if (T->Left==NULL) T = T->Right; else { if(T->Right==NULL) T=T->Left; else ThayThe1(p, T->Right);// tìm bên phải } delete p; } } } else printf("Khong tim thay phan can xoa tu");} 189 Hàm tìm phần tử mạng void ThayThe1(TREE &p, TREE &T) CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng { if(T->Left!=NULL) ThayThe1(p,T->Left); else { p->Key = T->Key; p=T; T=T->Right; } } 190 CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT _ Mai Xuân Hùng Tóm lượt nội dung cần nắm Các thuật tốn tìm kiếm xếp + Cài đặt hàm tìm kiếm thuật tốn tìm kiếm + Cài đặt hàm xếp thuật toán xếp + Ghi kết bước áp dụng thuật tốn tìm kiếm xếp vào liệu cho trước Áp dụng sách liên kết để giải toán đời sống thực tế + Quản lý sinh viên + Quản lý nhân viên công ty + Quản lý sách thư viện vv Cây nhị phân tìm kiếm + Vẽ hình dạng thêm dãy số vào + Cho biết kết duyệt theo thứ tự cho trước + Vẽ hình dạng xoá nút + Viết hàm tìm kiếm nút cây, duyệt cây, đếm… 191