Chương 1: Giới thiệu 1.1 Giới thiệu đề bài Xây dựng chức năng tìm kiếm và sắp xếp trên các câu trúc hỗ trợ quản lý danh mục đồng hồ được bán một đơn vị gồm các thông tin: Mã sản phẩm (MaSP); Hãng sản xuất (HangSX); Giới tính (đồng hồ nữ, đồng hồ nam, trung tinh, .2 Cấu trúc Mô tả cấu trúc được yêu cầu, chọn CTDL đề thê hiện, khai báo/định nghĩa cầu trúc Thong tin san pham déng hồ cần quản lý gồm: - MaSP: Mã sản phẩm, gồm một chuỗi ký tự số có chiều đài LI ký tự. - HangSX: Hãng sản xuất, chiều dài mỗi chữ khoảng 10 ký tự - GioiTinh: Giới tính, chỉ gồm I chữ với chiều dài chữ khoảng 10 ký tự - TrongLuong: Trọng lượng đồng hồ - BaoHanh: Thời gian bảo hành của đồng hồ - Gia: Giá bán của đồng hồ Cấu trúc dữ liệu hỗ trợ quản lý thông tin các đồng hà: - MaSP: chuỗi gồm II ký tự số - HangSX: chuỗi tối đa 10 ký tự - GioiTinh: chuỗi tối đa 10 ký tự - TrongLuong: số nguyên không âm (TrongLuong >= 0) - BaoHanh: số nguyên không âm (BaoHanh >= 0) Bài thực hành Cấu trúc dữ liệu và giải thuật - Gia : số thực dương (Gia>=0) Định nghĩa cầu trúc đồng ho: struct dongho { char MaSP[11]; char HangSxX[1@]; 1.3 Dữ liệu mẫu char GioiTinh[1®]; >= 10 thông tin đối tượng cần quản lý int TrongLuong; int BaoHanh; STT Ma SP Hang SX | Giới tính | Trọng float Gia; lượng l 1910 Casio Nam 70g 2 1901 Tag Nam 160g Heuer 1903 Rolex Nam 156g 4 1904 Omega Trung 55g tinh 5 1907 Longines | Nt 140g § 6 1906 Tissot Trung 180g tinh 7 1905 Timex Trung 100g tinh 8 1908 Calvin Nữ 902 Klein 9 1902 Movado | Nam 100g 10 1909 Citizen Nam 150g Bài thực hành Cấu trúc dữ liệu và giải thuật 1.4 Các chức năng (Liệt kê các chức năng sẽ xây dựng) Các chức năng trên máng cầu trúc - Nhập danh sách đồng hồ - Xuất danh sách đồng hồ - Tìm thông tin ĐH theo mã số x (dùng Linear Search và Binary Search) - Tìm thông tin ĐH theo hãng sản xuất (đùng Linear Search và Binary Search) - Sắp xếp danh sách theo Mã sản phẩm (dùng Shaker Sort) - Sắp xếp danh sách theo Mã sản phâm (dùng Selection Sort) - Sắp xếp danh sách theo Mã sản phâm (dùng Interchange Sort) - Sắp xếp danh sách theo Trọng lượng (dùng Bubble Sort) - Sắp xếp danh sách theo Giá (dùng Insertion Sort) - Sắp xếp danh sách theo thời gian Bảo hành (dùng Quick Sort) - Sắp xếp danh sách theo Mã sản phâm (dùng Merge Sort) Các chức năng trên danh sách liên kết - Nhập danh sách đồng hồ - Xuất danh sách đồng hồ - Tìm thông tin ĐH theo mã sp x (dung Linear Search ) - Tìm thông tin ĐH theo tén (dung Linear Search ) - Sắp xếp danh sách theo Mã sản phẩm (dùng Shaker Sort) - Sắp xếp danh sách theo Mã sản phâm (dùng Selection Sort) - Sắp xếp danh sách theo Mã sản phâm (dùng Interchange Sort) - Sắp xếp danh sách theo Trọng lượng (dùng Bubble Sort) - Sắp xếp danh sách theo Giá (dùng Insertion Sort) - Sắp xếp danh sách theo thời gian Bảo hành (dùng Quick Sort) - Sắp xếp danh sách theo Trọng lượng (dùng Merge Sort) Bài thực hành Cấu trúc dữ liệu và giải thuật Chương 2: Tìm kiêm và sắp xêp trên mảng câu trúc 2.1 Nhập danh sách đồng hồ 2.1 Chương trình con Đề nhập danh sách đồng hỗ, cần xây dựng hai chương trình con gồm: - void nhap o(dongho &a): hỗ trợ nhập thông tin một sinh viên gồm MaSp, HangSX, GioiTinh, TrongLuong, Baohanh, Gia - void nhap_mang(dongho al], int n) hỗ trợ nhập danh sách đồng hồ 10 Bài thực hành Cấu trúc dữ liệu và giải thuật //Ctc nhập ô cấu trúc -void nhap_o(dongho &a) { cout << "\nNhap ma san pham: "; cin.MaSP, 11); cout << "\nNhap hang san xuat: ”"; cin.HangSX, 19); cout << "\nNhap gioi tỉnh: "; cin.GioiTinh, 19); cout << "\nNhap trong luong san pham (g): "; cin >> a.TrongLuong; cout << "\nNhap thoi gian bao hanh (thang): ”; cin >> a.BaoHanh; cout << "\nNhap gia (trieu VND): "; cin >> a.2 Kiểm tra (Hàm main kiêm tra ctc) 11 Bài thực hành Cấu trúc dữ liệu và giải thuật int main() { //Khai báo mảng số nguyên 100 phần tử dongho arr[100]; int soft = 2; //Nhập mảng tương ứng với số phần tử đã nhập ở trên cout << "\nNhap vao thong tin san pham dong ho”; nhap_mang(arr, soft); return 0; } 2.3 Kết quả chạy phan tu a[0]: ma san pham: 1901 hang san xuat: Casio gioi tinh: Nam trong luong san pham (g): 70 thoi gian bao hanh (thang): gia (trieu VND): 5 phan tu a[1]: ma san pham: 1903 hang san xuat: Rolex gioi tinh: Nam trong luong san pham (g): 156 thoi gian bao hanh (thang): 24 gia (trieu VND): 100 2.2 Xuất thông tin đồng hồ 2.1 Chương trình con -Đề xuất danh sách sản phâm đồng hồ ,ta cũng cần phải xây đựng 2 chương trình con gôm : 12 Bài thực hành Cấu trúc dữ liệu và giải thuật +Xuất ô :void xuat_o(dongho a ):hỗ trợ xuất thông tin đã nhập của một sản phẩm đồng hỗ +Xuất mảng : voiđ xuat_mang (dongho a[].int n):hồ trợ xuất mảng sản phâm đồng hồ //ctc xuất ô cấu trúc void xuat_o(dongho a) ( cout << a.2 Kiểm tra (Hàm main kiêm tra ctc) int main() { //Khai báo mảng số nguyên 190 phần tử - dongho anr[199]; int soft = 2; //Nhập mảng tương ứng với số phần tử đã nhập ở trên cout << "\nNhap vao thong tin san pham dong ho”; nhap_mang(arr, soft); cout << "\nDanh sach cac san pham dong ho: ”; xuat_mang(arr, soft); return 9; } 2.3 Kết quả chạy 13 Bài thực hành Cấu trúc dữ liệu và giải thuật Danh sach cac san pham dong ho: Danh sach thong tin cua cac san pham dong ho: 1901 Cas1o Nam 70(g) 60(thang) 5 (trieu) ` 1903 Rolex Nam 56(g) 24(thang) 100 (trieu) j 2.3 Tìm kiếm mã sản phẩm với Linearsearch và Binarysearch: 2.1 Chương trình con Thực hiện tìm kiếm với khóa chính là Mã sản phẩm (dữ liệu khóa) Đề tìm thông tin theo mã số của đồng hô, cần xây dựng như sau: O void LinearSearch(dongho a[], int n): giải thuật tìm kiếm tuyến tính, hỗ trợ tìm ra đồng hồ có mã sô cần tìm. //Tìm kiếm LS theo mã sản phẩm void LinearSearch(dongho a[], int n) { char x[5]; cout << "\nNhap ma san pham muon tim: "; cin.MaSP, x) != 9) it+; if (i < n) { cout << "\nThong tin cua ma san pham ” << x << " la:”; xuat_o(a[i]); } else cout << "\nKhong tim thay"; O void BinarySearch(dongho al], int n): giai thuat tim kiém nhi phan, hé trợ tìm ra đồng hồ có mã so can tim. 14 Bài thực hành Cấu trúc dữ liệu và giải thuật //Tìm kiếm BS theo mã sp int BinarySearch(dongho a[], int n) { char x[5]; int left = 0; int right =n - 1; int mid = (right + left) / 2; cout << "\nNhap ma san pham muon tim: "; cin.MaSP) right = mid - 1; else left = mid + 1; mid = (right + left) / 2; } if (left <= right) { cout << "\nThong tin cua ma san pham ” << x << ” la:”; xuat_o(a[mid]); } else cout << "\nKhong tim thay"; return mid; } 2.2 Kiém tra 15 Bài thực hành Cấu trúc dữ liệu và giải thuật int main() { //Khai báo mảng số nguyên 199 phần tử - — dongho arr[199]; int soft = 2; //Nhập mảng tương ứng với số phần tử đã nhập ở trên 3 cout << "\nNhap vao thong tin san pham dong ho”; nhap_mang(arr, soft); cout << "\nDanh sach cac san pham dong ho: ”"; ị xuat_mang(arr, soft); //Tìm kiếm LS mã sp đồng hồ | LinearSearch(arr, soft); return 9; } Ham main test cho phan tim kiém theo ma sp bang Linear Search int main() { //Khai bao mang sO nguyén 10@ phan tu dongho arr[100]; int soft = 2; //Nhập mảng tương ứng với số phần tử đã nhập ở trên cout << "\nNhap vao thong tin san pham dong ho”; nhap_mang(arr, soft); cout << "\nDanh sach cac san pham dong ho: "; xuat_mang(arr, soft); //Tìm kiếm BS mã sp đồng hồ BinarySearch(arr, soft); return 9; Hàm main test cho phần tìm kiếm theo mã số bằng Binary Search 2.3 Kết quả chạy ï Kết quả chạy tìm thông tin đồng hỗ có mã số 1903 có trong danh sách hàm test 16 Bài thực hành Cấu trúc dữ liệu và giải thuật Danh sach cac san pham dong ho: Danh sach thong tin cua cac san pham dong ho: Casio Nam 70(g) 60(thang) Rolex Nam 156(g) 24(thang) Nhap ma san pham muon tim: Thong tin cua ma san pham 1993 la:1993 Rolex Nam 156(g) 24(thang) test 2ham dong Danh sach thong tin cua cac s ho: Casio Nam ˆ 5 (trieu) Rolex Nam 6(g) 100 (trieu) Nhap ma san pham muon tim: 1902 Khong tim thay 2.4 Tim thong tin DH theo hang san xuat dùng Linearsearch và Binarysearch 2.1 Chương trình con Thực hiện tìm kiếm với khóa chính là Hãng sản xuất (dữ liệu khóa) Đề tìm thông tin theo mã số của đồng hô, cần xây dựng như sau: O void LinearSearch_h(dongho al], int n): gidi thuật tìm kiếm tuyến tính, hỗ trợ tìm ra dong ho có hãng sản xuat can tim.
17 Bài thực hành Cấu trúc dữ liệu và giải thuật //Tìm kiêm LS theo hãng sản xuât void LinearSearch_h(dongho a[], int n) { char x[13]; cout << "\nNhap hang san xuat muon tim: "3; cin.HangSX, x) != 9) 1++; if (i <n) cout << "\nThong tin dong ho cua hang san xuat " << x << ”" la:"; xuat_o(a[i]); else cout << "\nKhong tim thay"; 4 void BinarySearch h(dongho al], int n): giải thuật tìm kiếm nhị phân, hỗ trợ tìm ra đông hồ có hãng sản xuat can tim. 18 Bài thực hành Cấu trúc dữ liệu và giải thuật //Tìm kiếm BS theo hãng sản xuất int BinarySearch_h(dongho a[], int n) { char x[13]; int left = 0; int right =n - 1; int mid = (right + left) / 2; cout << "\nNhap hang san xuat muon tim: "; cin.HangSX) right = mid - 1; else left = mid + 1; mid = (right + left) / 2; if (left <= right) { cout << "\nThong tin cua ma san pham " << x << " lai"; xuat_o(a[mid]); } else cout << "\nKhong tim thay"; return mid; } 2.2 Kiém tra 19 Bài thực hành Cấu trúc dữ liệu và giải thuật int main() //Khai báo mảng số nguyên 100 phần tử : dongho arr[ 298]; int soft = //Nhập mảng tương ứng với số phần tử đã nhập ở trên cout << "\nNhap vao thong tin san pham dong ho”; nhap_mang(arr, soft); cout << "\nDanh sach cac san pham dong ho: ”; xuat_mang(arr, soft); //Tìm kiếm LS theo hãng sản xuất ị LinearSearch_h(arr, soft); return 9; } Hàm main test cho phần tìm kiếm theo hãng sản xuất bằng Linear Search int main() { //Khai báo mảng số nguyên 109 phần tử .