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 Ma
Trang 1TRUONG DAI HOC TAI CHINH — MARKETING
CAU TRUC DU LIEU VA GIAI
THUAT
Giang vién : Nguyễn Quốc Thanh
Sinh viên thực hiện : Đễ Tường Vy
TPHCM - 12/2020
Trang 2BỘ TÀI CHÍNH TRƯỜNG ĐẠI HỌC TAI CHINH — MARKETING
CAU TRUC DU LIEU VA GIAI
THUAT
Giang vién : Nguyễn Quốc Thanh
Sinh viên thực hiện : Đễ Tường Vy
TPHCM - 12/2020
2
Trang 3Lờ
Lờ
Ch
Ch
Ch
MỤC LỤC
I®:0082s 1 4
Ie1u19 7 5
ii SIc ii .a 6
1.1 Gi Gthi GU nh ố 6
1.2 CââU †FÚC - - - Ă KH HH HH HH TH HT th kg 6 1.3 Dữ lỆ U mẫu c0 00000 HH n0 00 C08 55 8 c4 7 1.4 Cac CHUC in e 8
ngr?: Tìm kiêâm và säâp xêâp trên m ¿ng cââu †rÚC - - SH, 9 VĂN c0 3n áo e 9
VWÊ 080v 0ï (8 1n 11
2.3 Tìm kiêâm mã sản phẩm w ¡ Linearsearch và Binarysearch: - 13
2.4 Tìm thông tin DH theo hang s 4 xudat dùng Linearsearch và Binarysearch 16
2.5 Săâp xêâp danh sách theo Mã sản plá m dùng Shaker Sort 20
2.6 Săâp xêâp danh sách theo Mã sản plá m dùng Selection Sort 22
2.7 Sãâp xêâp danh sách theo Hãng s ủ xuâât dùng Interchange Sort 24
2.8 Sãâp xêâp danh sách theo Trọng trợ ng dùng Bubble Sort -«- 26
2.9 Sãâp xêâp danh sách theo Giá dùng Insertion Sort - cà SA x22 28 2.10 Sãâp xêâp danh sách theo thời gian Bị o hành dùng Quick Sort 30
ngr8: Tìm kiêâm và säâp xêâp trên danh sách liên kêât -c-Ằ<sẰ- 33 E20 095 33
3.2 Các thao tác cơ là n trên DSLÍ SH TH HH 34 3.3 Tìm kiêâm thông tin đôêng hôê theo mã sản phâm +5 55555: 39 3.4 Tìm thông tin ĐH theo tên hãng sả xuâât dùng Linear Search 42
3.5 Săâp xêâp danh sách theo mã sản phá m dùng Sharker Sort - 44
3.6 Săâp xêâp danh sách theo Mã sản plâ m dùng Selection Sort 44
3.7 Săâp xêâp danh sách theo Mã sản phá m dùng Interchange Sort 46
3.8 Sãâp xêâp danh sách theo Trọng trợ ng dùng Bubble Sort «-« 48
3.9 Sãâp xêâp danh sách theo thời gian Bi o hành dùng Insertion Sort 50
3.10 Sãâp xêâp danh sách theo thời gian li o hành dùng Quick Sort 52
Trang 5Lời Cam Đoan Tôi xin cam đoan bài đồ án này là do chính tôi thực hiện cùng với sựu hô trợ từ giáo viên giảng dạy bộ môn hướng dân và các bạn bè trong nhóm học tập không đánh cắp do an của người khác làm của riêng cho mình và hướng quyền lợi trên công sức của người khác
Tôi xin chịu hoàn toàn trách nhiệm về lời cam đoan trên !
Sinh Viên
Đỗ Tường Wy
Trang 6Lời Cảm Ơn
Lời nói đầu tiên em xin gửi lời cám ơn đến giáo viên trong toàn khoa CNTT của Trường Đại Học Tài chính Marketing nói chung và 2 giáo viên chuyên ngành giảng dạy bộ môn cấu trúc đữ liệu và giải thuật nói riêng Và em xin gửi lời cám ơn đặc biệt nhất đến Thầy Nguyễn Quốc Thanh giáo viên giảng dạy và hướng dẫn em thực hiện tốt bài đồ án lần này
Em xin trân trong cam on !
Sinh Vién
D6 Tuong Vy
Trang 7Chươ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, .) (GioiTinh); Trọng lượng của đồng hỗ (TrongLuong); Thời gian bảo hành (tháng) (BaoHanh);
Gia ban (Gia)
1.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)
Trang 8- Gia : số thực dương (Gia>=0)
Định nghĩa cầu trúc đồng ho:
Trang 91.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)
Trang 10Chươ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.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
Trang 12//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);
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
Trang 13+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
cout << a.BaoHanh << "(thang) \t";
ị cout << a.Gia << " (trieu) \t";
cout << "\nDanh sach cac san pham dong ho: ”; xuat_mang(arr, soft);
return 9;
}
2.2.3 Kết quả chạy
13
Trang 14Danh 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) `
2.3 Tìm kiếm mã sản phẩm với Linearsearch và Binarysearch:
2.3.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
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
Trang 15int mid = (right + left) / 2;
cout << "\nNhap ma san pham muon tim: ";
else left = mid + 1;
mid = (right + left) / 2;
Trang 16//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”;
//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);
Trang 17Danh 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:
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.4.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
Trang 18//Tìm kiêm LS theo hãng sản xuât
void LinearSearch_h(dongho a[], int n)
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
Trang 19//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: ";
else left = mid + 1;
mid = (right + left) / 2;
Trang 20int 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”;
Trang 21Danh sach cac san pham dong ho
ach thong tin cua cac s
Omega Trungtinh
Nhap hang san xuat muon tim: Omega
Thong tin dong ho cua hang san xuat 0mega la:196 Omega Trungtinh 55(g) 12(thang)
1 Kết quả chạy tìm thông tin đồng hỗ có hãng sản xuất Casio không có trong danh sách hàm test
sach thong tin cua cac
rl
12(thang
Nhap hang sar
Khe > tim thay
2.5 Sắp xếp danh sách theo Mã sản pham ding Shaker Sort
2.5.1 Chương trình con
Z1 void ShakerSort(dongho arr[],int n): giải thuật sắp xếp các thông tin theo mã số Về
ý tưởng giải thuật xuất phát từ cuối dãy, xét các phần tử gần nhau, nếu là nghịch thế thì hoán vi hai phân tử này với mục đích đây phân tử bé nhất về đầu dãy Trong mỗi
lần sắp xếp sẽ thực hiện 2 lượt:
Z1 Lượt đi: đây phần tử bé nhất về đầu dãy
7l Lượt về: đây phân tử lớn nhất về cuối dãy
O void swap(dongho &a, dongho &b): ham hoan vi hé tro cho phan sap xép trong chương trình con
21
Trang 22//CTC ShakerSort sap xép theo ma sp
void SharkerSort(dongho a[], int n)
for (int: i = right; i > left; <i )
1f (strcmp(a[i].MaSP, a[i - 1].MaSP) < 9)
Trang 23int main()
//Khai báo mảng số nguyén 10@ phan tu
dongho arr[100@];
int soft = 4;
//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”;
cac san pham dong
Danh sach thong tin cua cac san pham dong ho:
Casio Nam 79(g) 69( thang) 5 (trieu)
TaghHeuer Nam 156(g) 24(thang) 34 (trieu) Rolex Nam 156(g) 24(thang) 199 (trieu)
Omega TrungTinh 55(g) 12(thang) 23 (trieu) Danh sach dong ho sau khi sap xep la:
Danh sach thong tin cua cac san pham dong ho:
TaghHeuer Nam 156(g) 24(thang) 34 (trieu) Rolex Nam 156(g) 24(thang) 199 (trieu)
Omega TrungTinh 55(g) 12(thang) 23 (trieu) Casio Nam 79(g) 66(thang) 5 (trieu)
2.6 Sắp xếp danh sách theo Mã sản pham ding Selection Sort
2.6.1 Chương trình con
Đề sắp xếp thông tin theo mã sản phẩm, ta cần xây dựng như sau:
L¡ void SelectionSort(dongho arr[], 1nt n): giải thuật sắp xếp băng chọn trực tiếp Với ý tưởng chọn phần tử nhỏ nhất trong mảng, đưa phần tử này về đầu mảng, tiếp tục lặp lại để sắp xếp mảng từ vị trí thứ 2
L¡ void hoanvi(dongho &a, dongho &b): ham hoan vi hỗ trợ việc hoán vị các phần tử trong chương trình con SelectionSort
23
Trang 24dongho arr[1@] = { {”1919”, "Casio”, "Nam” , 79,69, 5},
{”1991”, "Tag Heuer”" ; "Nam", 169; 23, 34},
Trang 25san pham dong B
Danh sach thong tin cua cac san pham dong ho:
Tissot Trung tinh ( 12(thang)
Timex Irung tỉnh ) 12(thang)
inKlein 90(g) 24(thang)
( hang) 12 (trie (thang) 2.5 (trieu) Danh sach dong ho sau khi sap xep theo ma san pham bang SelectionSort la: Danh sach thong tin cua cac san pham dong ho:
1901 Tag Heuer Nam (g) 23(
Irung tĩnh
Trung tình
Trung tinh (
Nu ) 12(thang) CalvinKlein Nu 24(thang)
Citize ầm 150(g) )
Casio lam 70(g) ) (trieu)
2.7 Sap xép danh sach theo Hang san xuat dung Interchange Sort 2.7.1 Chương trình con
Đề sắp xếp thông tin theo Hãn sản xuất, ta cần xây dựng như sau:
1 void InterchangeSort(dongho arr[], int n): giải thuật sắp xếp bằng đôi chỗ trực tiếp Với ý tưởng bắt đầu từ đầu mảng, tìm các nghịch thế (phần tử sau
bé hơn phần tử trước) của phần tử này, thực hiện hoán vị nếu có, sau đó lặp lại từ phần tir ké tiếp cho đến khi mảng được sắp xếp
O void hoanvi(Bangdiem &a, Bangdiem &b): thuat toan hoan vị hỗ trợ hoán vị các phần tử nghịch thế trong chương trình con Interchange Sort
25
Trang 26void InterchangeSort(dongho a| |, int n)
for (int i = 0; i <n; i++)
dongho arr[10] = { {"1910","Casio","Nam",70,60,5},
{"1901","Tag Heuer", "Nam",160, 23,34},
Trang 27y tin cua cac san pham
Trung tinh 55( 2(thang) 3 (trieu)
Trung tinh (g) P an 2 (trieu)
(trieu)
3 (trieu) (trieu)
2.8 Sap xép danh sách theo Trọng lượng dùng Bubble Sort 2.8.1 Chương trình con
Đề sắp xếp thông tin theo trọng lượng, ta cần xây dựng như sau:
(]_ void BubbleSort(dongho a[] mt n): giải thuật sắp xếp nổi bọt Với ý tưởng xuất phát từ cuôi dãy, hoán vị các cặp nghịch thế kế tiếp nhau và cứ lặp lại cho đến khi mảng được sắp xếp
O void hoanvi(dongho &a, dongho &b): ham hoan vi hé tro cho viée hoan vi cac nghich thé trong chuong trinh con Bubble Sort
//CTC sắp xếp danh sách theo trọng lượng bằng Bubble Sort
void BubbleSort(dongho a[], int n)