Chương 1: Giới thiệu1.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
Trang 1Giảng viên : Nguyễn Quốc Thanh
Sinh viên thực hiện : Đỗ Tường Vy
ĐỒ ÁN MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI
THUẬT
TPHCM - 12/2020
BỘ TÀI CHÍNH TRƯỜNG ĐẠI HỌC TÀI CHÍNH – MARKETING
Trang 2Giảng viên : Nguyễn Quốc ThanhSinh viên thực hiện : Đỗ Tường Vy
ĐỒ ÁN MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI
THUẬT
TPHCM - 12/2020
Trang 3MỤC LỤC
L i Cam Đoanờ 4
L i C m nờ ả Ơ 5
Chương 1: Gi i thi uớ ệ 6
1.1 Gi i thi u đềề bàiớ ệ 6
1.2 Cấấu trúc 6
1.3 D li u mấẫuữ ệ 7
1.4 Các ch c năngứ 8
Chương 2: Tìm kiềấm và săấp xềấp trền m ng cấấu trúcả 9
2.1 Nh p danh sách đồềng hồềậ 9
2.2 Xuấất thồng tin đồềng hồề 11
2.3 Tìm kiềấm mã s n ph m v i Linearsearch và Binarysearch:ả ẩ ớ 13
2.4 Tìm thồng tin ĐH theo hãng s n xuấất dùng Linearsearch và Binarysearchả 16
2.5 Săấp xềấp danh sách theo Mã s n ph m dùng Shaker Sortả ẩ 20
2.6 Săấp xềấp danh sách theo Mã s n ph m dùng Selection Sortả ẩ 22
2.7 Săấp xềấp danh sách theo Hãng s n xuấất dùng Interchange Sortả 24
2.8 Săấp xềấp danh sách theo Tr ng lọ ượng dùng Bubble Sort 26
2.9 Săấp xềấp danh sách theo Giá dùng Insertion Sort 28
2.10 Săấp xềấp danh sách theo th i gian B o hành dùng Quick Sortờ ả 30
Chương 3: Tìm kiềấm và săấp xềấp trền danh sách liền kềất 33
3.1 Đ nh nghĩa DSLKị 33
3.2 Các thao tác c b n trền DSLKơ ả 34
3.3 Tìm kiềấm thồng tin đồềng hồề theo mã s n ph mả ẩ 39
3.4 Tìm thồng tin ĐH theo tền hãng s n 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 ph 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 lọ ượng dùng Bubble Sort 48
3.9 Săấp xềấp danh sách theo th i gian B o hành dùng Insertion Sortờ ả 50
3.10 Săấp xềấp danh sách theo th i gian B 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 đồ án 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 Vy
Trang 6dạy bộ môn cấu trúc dữ 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 trọng cảm ơn !
Sinh Viên
Đỗ Tường 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 tính, ) (GioiTinh); Trọng lượng của đồng hồ (TrongLuong); Thời gian bảo hành (tháng) (BaoHanh); Giá bán (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
Thông tin sản phẩm đồ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 dài 11 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 1 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 11 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 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 (dù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 (dùng Linear Search )
- Tìm thông tin ĐH theo tên (dùng 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 102.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 a[], int n) hỗ trợ nhập danh sách đồng hồ
Trang 112.2.2 Kiểm tra (Hàm main kiểm tra ctc)
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
Trang 142.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:
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
void BinarySearch(dongho a[], int n): giải thuật tìm kiếm nhị phân, hỗ trợtìm ra đồng hồ có mã số cần tìm
Trang 152.3.2 Kiểm tra
Trang 16Hàm main test cho phần tìm kiếm theo mã sp bằng Linear Search
Hàm main test cho phần tìm kiếm theo mã số bằng Binary Search
2.3.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
Trang 17 Kết quả chạy tìm thông tin đồng hồ có mã số 1902 không có trong danh sách test
2.4 Tìm thông tin ĐH theo hãng sản xuất 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:
void_LinearSearch_h(dongho a[], int n): giải thuật tìm kiếm tuyến tính, hỗ trợ tìm
ra đồng hồ có hãng sản xuất cần tìm
Trang 18 void BinarySearch_h(dongho a[], 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 xuất cần tìm.
Trang 192.4.2 Kiểm tra
Trang 20Hàm main test cho phần tìm kiếm theo hãng sản xuất bằng Linear Search
Hàm main test cho phần tìm kiếm theo hãng dản xuất bằng Binary Search
2.4.3 Chạy kết quả
Kết quả chạy tìm thông tin đồng hồ có hãng sản xuất Omega có trong danh sách hàm test
Trang 21 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
2.5 Sắp xếp danh sách theo Mã sản phẩm dùng Shaker Sort
2.5.1 Chương trình con
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 vị hai phần tử này với mục đích đẩy phần tử bé nhất về đầu dãy Trong mỗilần sắp xếp sẽ thực hiện 2 lượt:
Lượt đi: đẩy phần tử bé nhất về đầu dãy
Lượt về: đẩy phần tử lớn nhất về cuối dãy
void swap(dongho &a, dongho &b): hàm hoán vị hỗ trợ cho phần sắp xếp trongchương trình con
Trang 222.5.2 Kiểm tra
Trang 23Hàm main test cho phần sắp xếp thông tin theo mã sản phẩm bằng Shaker Sort.
2.5.3 Chạy kết quả
2.6 Sắp xếp danh sách theo Mã sản phẩm dùng 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:
void SelectionSort(dongho arr[], int n): giải thuật sắp xếp bằng chọn trựctiếp Với ý tưởng chọn phần tử nhỏ nhất trong mảng, đưa phần tử này về đầumảng, tiếp tục lặp lại để sắp xếp mảng từ vị trí thứ 2
void hoanvi(dongho &a, dongho &b): hàm hoán vị hỗ trợ việc hoán vị cácphần tử trong chương trình con SelectionSort
Trang 242.6.2 Kiểm tra
Hàm main test cho phần sắp xếp thông tin theo mã sản phẩm bằng Selection Sort.
2.6.3 Chạy kết quả
Trang 252.7 Sắp xếp danh sách theo Hãng sản xuất dùng 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:
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ặplại từ phần tử kế tiếp cho đến khi mảng được sắp xếp
void hoanvi(Bangdiem &a, Bangdiem &b): thuật toán hoán vị hỗ trợ hoán vịcác phần tử nghịch thế trong chương trình con Interchange Sort
Trang 262.7.2 Kiểm tra
Hàm main test cho phần sắp xếp thông tin theo mã sản phẩm bằng Interchange Sort.
2.7.3 Chạy kết quả
Trang 272.8 Sắp 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[], int n): giải thuật sắp xếp nổi bọt Với ý tưởngxuấ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ạicho đến khi mảng được sắp xếp
void hoanvi(dongho &a, dongho &b): hàm hoán vị hỗ trợ cho việc hoán vịcác nghịch thế trong chương trình con Bubble Sort
Trang 28Hàm main test cho phần sắp xếp thông tin theo trọng lượng bằng Bubble Sort.
2.8.3 Chạy kết quả
Trang 292.9 Sắp xếp danh sách theo Giá dùng Insertion Sort
2.9.1 Chương trình con
Để sắp xếp thông tin theo giá, ta cần xây dựng như sau:
void InsertionSort(dongho arr[], int n): giải thuật sắp xếp chèn trực tiếp Với
ý tưởng chia mảng cần sắp xếp thành 2 mảng con, mảng T chứa arr[0], mảng
P chứa phần còn lại Chọn 1 phần tử arr[i] trong P, tìm vị trí thích hợp và chèn arr[i] vào mảng T Lặp lại cho đến khi mảng P rỗng
void hoanvi(dongho &a, dongho &b): hàm hoán vị hỗ trợ cho việc hoán vịcác nghịch thế trong chương trình con Insertion Sort
Trang 302.9.2 Kiểm tra
Hàm main test cho phần sắp xếp thông tin theo giá bằng Insertion Sort.
2.9.3 Chạy kết quả
Trang 312.10 Sắp xếp danh sách theo thời gian Bảo hành dùng Quick Sort
2.10.1 Chương trình con
Để sắp xếp thông tin theo thời gian bảo hành, ta cần xây dựng như sau:
void QuickSort(dongho arr[], int n): Giải thuật sắp xếp với ý tưởng phân chiamảng ban đầu thành 3 mảng con Mảng con 1 gồm các phần tử nhỏ hơn x, mảng con 2 gồm 1 phần tử x, mảng con 3 gồm các phần tử lớn hơn x Sau đótiếp tục áp dụng Quick Sort cho dãy con 1 và dãy con 3
Trang 322.10.2 Kiểm tra
Hàm main test cho phần sắp xếp thông tin theo thời gian bảo hành bằng Quick Sort.
2.10.3 Chạy kết quả
Trang 34Đầu tiên, chúng ta xem xét cách cài đặt DSLK hỗ trợ quản lý danh sách Đồng hồ Nội dung gồm 3 bước:
Định nghĩa phần thông tin
Phần thông tin (data)
Phần con trỏ tiep dùng để chỉ vào nút sau và tạo liên kết với phần tử sau
3.1.3 Định nghĩa DSLK
Một DSLK được quản lý bởi 2 con trỏ
Head chỉ vào con trỏ đầu
Tail chỉ vào con trỏ sau
Trang 353.2 Các thao tác cơ bản trên DSLK
3.2.1 Khởi tạo DSLK
DSLK ban đầu chưa có phần tử nào nên con trỏ pHead và pTail sẽ chỉ vào giá trị NULL.Việc khởi tạo 1 DSLK đơn giản là cho 2 con trỏ này chỉ
3.2.2 Nhập DSLK
Để nhập DSLK, hàng loạt các bước phải được thực hiện tuần tự
Bước 1: Nhập thông tin ô bự
Bước 2: Đóng gói phần thông tin kèm theo con trỏ để tạo Node (nút)
Trang 36 Bước 3: Đưa Node (nút) vào DSLK
Bước 4: Tạo yêu cầu nhập tiếp và ngừng nhập
Trang 37Hàm main test
Chạy kết quả
Trang 383.2.3 Xuất DSLK
Xuất thông tin
Trang 40 Nguyên tắc hoạt động
Trang 41So sánh với phần tử đầu tiên nếu đúng kết thúc chương trình và đưa ra dữ liệu trongNode đó, nếu sai chuyển sang so sách với Node kế tiếp
3.3.2 Kiểm tra
Trang 423.3.3 Chạy kết quả
Trang 433.4 Tìm thông tin ĐH theo tên hãng sản xuất dùng Linear Search
3.4.1 Chương trình con
3.4.2 Kiểm tra
Trang 443.4.3 Chạy kết quả
Trang 453.5 Sắp xếp danh sách theo mã sản phẩm dùng Sharker Sort
Giống với BinarySearch, để thực hiện ShakerSort cần xác định được phần tử cuối cùng Thế nên, ShakerSort không thể thực hiện trên DSLK
3.6 Sắp xếp danh sách theo Mã sản phẩm dùng Selection Sort
Trang 463.6.3 Chạy kết quả
Trang 473.7 Sắp xếp danh sách theo Mã sản phẩm dùng Interchange Sort
Trang 483.7.3 Chạy kết quả
Trang 493.8 Sắp xếp danh sách theo Trọng lượng dùng Bubble Sort
3.8.1 Chương trình con
Nguyên tắc hoạt động
Giống với các bọt nước càng nhẹ thì nổi lên càng nhanh, tương tự với các hòn đá càng nặng chìm xuống đáy càng nhanh Theo ý tưởng đó ta đưa các phần tử lớn về cuối dãy và giảm dần về đầu dãy
Trang 503.8.2 Kiểm tra
Trang 513.9 Sắp xếp danh sách theo thời gian Bảo hành dùng Insertion Sort3.9.1 Chương trình con
3.9.2 Kiểm tra
Trang 523.9.3 Chạy kết quả
Trang 533.10 Sắp xếp danh sách theo thời gian Bảo hành dùng Quick Sort
3.10.1 Chương trình con
node cờ (node x trong vd dưới đây) 1 danh sách l1 sẽ chứa các node có trườngdata<= data của node x Danh sách l2 còn lại sẽ chứa các có trường data>= trường data của node x, sắp xếp từng danh sách l1,l2 sau đó nối l1,x,l2 lại với nhau ta có danh sách liên kết đã được sắp xếp theo thứ tự
3.10.2 Kiểm tra
Trang 543.10.3 Chạy kết quả