Mục lục
1 Giới thiệu đề bài 6
2.1 Các thông tin cần quản lý 62.2 Cấu trúc dữ liệu hỗ trợ quản lý thông tin sinh viên 62.3 Định nghĩa cấu trúc tồn kho 72.4 Nhập một sản phẩm tồn kho 72.5 Xuất một sản phẩm tồn kho 82.6 Hoán đổi dữ liệu 2 sản phẩm 9
4 Các chức năng 114.1 Các chức năng trên mảng cấu trúc 114.2 Các chức năng trên Danh sách liên kết đơn 11
Chương II Tìm kiếm và sắp xếp trên Mảng cấu trúc.12
a, Nhập từ bàn phím 12b, Nhập từ file 12
Trang 39 Sắp xếp mảng theo Mã sản phẩm bằng Interchange Sort 2110 Sắp xếp mảng theo Mã kho bằng Bubble Sort 2211 Sắp xếp mảng theo Ngày kiểm tra bằng Insertion Sort 2212 Sắp xếp mảng theo Lượng tồn bằng Merge Sort 2313 Sắp xếp mảng theo Lượng tồn bằng Quick Sort 25
14 Kiểm thử các tính năng của chương trình.26
14.1 Menu các lựa chọn cho người dùng 2614.2 Hàm main() 2614.3 Kiểm thử nhập dữ liệu 301 Nhập dữ liệu từ bàn phím 302 Nhập dữ liệu từ file 3114.4 Kiểm thử các tính năng tìm kiếm và sắp xếp 31
2 Tìm kiếm sản phẩm theo mã sản phẩm bằng thuật toán Linear Search 323 Tìm kiếm sản phẩm theo Mã sản phẩm bằng thuật toán Binary Search 324 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Linear Search 335 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Binary Search 336 Sắp xếp mảng theo Mã sản phẩm bằng Shaker Sort 347 Sắp xếp mảng theo Mã kho bằng Selection Sort 348 Sắp xếp mảng theo Mã sản phẩm bằng Interchange Sort.
359 Sắp xếp mảng theo Mã kho bằng Bubble Sort 3610 Sắp xếp mảng theo Ngày kiểm tra bằng Insertion Sort.
3711 Sắp xếp mảng theo Lượng tồn bằng Merge Sort 3812 Sắp xếp mảng theo Lượng tồn bằng Quick Sort 40
Trang 4Chương III Tìm kiếm và sắp xếp trên Danh sách liên kết đơn.40
1 Định nghĩa DSLK 402 Một số thao tác trên DSLK 412.1 Tạo mới một Node 412.2 Khởi tạo DSLK rỗng 422.3 Thêm 1 node vào cuối DSLK 422.4 Truy cập con trỏ giữa DSLK 422.5 Truy cập con trỏ cuối DSLK 43
a Nhập từ bàn phím 43b Nhập từ file 43
Trang 515.3 Kiểm thử nhập dữ liệu 601 Nhập dữ liệu từ bàn phím 602 Nhập dữ liệu từ file 6115.4 Kiểm thử các tính năng tìm kiếm và sắp xếp 61
2 Tìm kiếm sản phẩm theo mã sản phẩm bằng thuật toán Linear Search 623 Tìm kiếm sản phẩm theo Mã sản phẩm bằng thuật toán Binary Search 624 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Linear Search 635 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Binary Search 636 Sắp xếp DSLK theo Mã kho bằng Selection Sort 647 Sắp xếp DSLK theo Mã sản phẩm bằng Interchange Sort.648 Sắp xếp DSLK theo Mã kho bằng Bubble Sort 659 Sắp xếp DSLK theo Ngày kiểm tra bằng Insertion Sort.6610 Sắp xếp DSLK theo Lượng tồn bằng Merge Sort 6711 Sắp xếp DSLK theo Lượng tồn bằng Quick Sort 68
Trang 6Chương I Giới thiệu.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ý thông tin sản phẩm tồn kho bao gồm: Mã sản phẩm (MaSP), Mã Kho(MaKho), Lượng sản phẩm tồn trong kho
(LuongTon), Chi phí lưu kho mỗi ngày (ChiPhi), Ngày kiểm tra sản phẩm lần cuối (NgayKT)
2 Cấu trúc.
2.1 Các thông tin cần quản lý.
● MaSP: Mã sản phẩm, gồm một chuỗi ký tự với 2 phần, những ký tự chữ cái đầu là tên viết tắt của sản phẩm, những ký tự số theo sau là số thứ tự sản phẩm Mỗi sản phẩm có mã sản phẩm duy nhất
● MaKho: Mã kho, gồm một chuỗi ký tự với 2 phần, những ký tự chữ cái đầu là tên viết tắt của kho, những ký tự số theo sau là số thứ tự kho
● LuongTon: Lượng sản phẩm tồn trong kho, là một số nguyên không âm
● ChiPhi: Chi phí lưu kho mỗi ngày, là một số thực không âm● NgayKT: Ngày kiểm tra sản phẩm lần cuối được viết dưới dạng
tháng trước ngày sau (MM/DD).
2.2 Cấu trúc dữ liệu hỗ trợ quản lý thông tin sinhviên.
● MaSP: xâu ký tự● MaKho: xâu ký tự
● LuongTon: số nguyên không âm (LuongTon >= 0)● ChiPhi: số thực không âm (ChiPhi >= 0.00)● NgayKT: chuỗi ký tự
Trang 72.3 Định nghĩa cấu trúc tồn kho.
Trang 8Kết quả gọi hàm:
Hàm hỗ trợ xuất dữ liệu cho 1 sản phẩm tồn kho trong mảng cấutrúc, kèm thứ tự.
Kết quả gọi hàm:
Trang 92.6 Hoán đổi dữ liệu 2 sản phẩm.
Hàm thay đổi dữ liệu 2 biến TONKHO hỗ trợ cho các hàm sắp xếp.
3 Dữ liệu mẫu.
TK01 KHO42 68 20.14 05/12TK02 KHO25 79 89.70 11/06TK03 KHO06 46 71.34 04/11TK04 KHO42 96 37.08 04/12TK05 KHO42 5 12.79 10/14TK06 KHO33 22 57.55 03/25TK07 KHO48 27 45.63 07/10TK08 KHO13 68 80.46 08/06TK09 KHO04 12 95.63 10/04TK10 KHO15 42 24.30 06/18TK11 KHO48 45 99.68 10/12TK12 KHO10 24 30.43 02/04TK13 KHO17 36 68.04 07/10TK14 KHO07 41 28.02 05/19TK15 KHO47 6 49.01 10/05TK16 KHO01 7 94.97 10/15TK17 KHO30 24 73.77 11/02TK18 KHO41 67 23.29 12/21TK19 KHO45 40 75.40 08/20TK20 KHO39 19 7.29 10/19
Trang 104 Các chức năng.
4.1 Các chức năng trên mảng cấu trúc.
● Nhập mảng● Xuất mảng
● Tìm kiếm sản phẩm theo mã sản phẩm bằng thuật toán LinearSearch
● Tìm kiếm sản phẩm theo Mã sản phẩm bằng thuật toán BinarySearch
● Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Linear Search
● Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Binary Search
● Sắp xếp mảng theo Mã sản phẩm bằng Shaker Sort● Sắp xếp mảng theo Mã kho bằng Selection Sort
● Sắp xếp mảng theo Mã sản phẩm bằng Interchange Sort● Sắp xếp mảng theo Mã kho bằng Bubble Sort
● Sắp xếp mảng theo Ngày kiểm tra bằng Insertion Sort● Sắp xếp mảng theo Lượng tồn bằng Merge Sort● Sắp xếp mảng theo Lượng tồn bằng Quick Sort
4.2 Các chức năng trên Danh sách liên kết đơn.
● Sắp xếp DSLK theo Mã kho bằng Selection Sort
● Sắp xếp DSLK theo Mã sản phẩm bằng Interchange Sort● Sắp xếp DSLK theo Mã kho bằng Bubble Sort
● Sắp xếp DSLK theo Ngày kiểm tra bằng Insertion Sort● Sắp xếp DSLK theo Lượng tồn bằng Merge Sort
Trang 11● Sắp xếp DSLK theo Lượng tồn bằng Quick Sort
Trang 12Chương II Tìm kiếm và sắp xếp trênMảng cấu trúc.
Trang 13Kết quả gọi hàm:
2 Xuất mảng.
Hàm xuất dữ liệu cho 1 mảng cấu trúc, mỗi lần lặp sẽ gọi đến hàm xuất dữ liệu cho 1 biến kèm số thứ tự
Trang 14Kết quả gọi hàm:
3 Tìm kiếm sản phẩm theo mã sản phẩm bằng thuật toán Linear Search.
Thuật toán Linear Search sẽ duyệt qua mảng cấu trúc để tìm sản phẩm có mã cần tìm Ưu điểm của thuật toán này là mảng không cần được sắp xếp, phù hợp với bộ dữ liệu nhỏ Nhược điểm làvới bộ dữ liệu lớn thì trường hợp tệ nhất phải so sánh n lần Độ phứctạp O(n).
Nếu tìm thấy sẽ gọi hàm in thông tin sản phẩm này ra và trả về vị trí xuất hiện của sản phẩm
Nếu không tìm thấy hàm sẽ in ra là sản phẩm không tồn tại vàtrả về -1.
Trang 15Kết quả gọi hàm:
4 Tìm kiếm sản phẩm theo Mã sản phẩm bằng thuật toán Binary Search.
Thuật toán Binary Search sẽ chặt đôi mảng cấu trúc để tìm sản phẩm có mã cần tìm Ưu điểm của thuật toán này là tốc độ tìm kiếm nhanh, phù hợp với bộ dữ liệu lớn Nhược điểm là bộ dữ liệu phải được sắp xếp Độ phức tạp O(log2(n)).
Nếu tìm thấy sẽ gọi hàm in thông tin sản phẩm này ra và trả về vị trí xuất hiện của sản phẩm
Nếu không tìm thấy hàm sẽ in ra là sản phẩm không tồn tại vàtrả về -1.
Trang 18Kết quả gọi hàm:
Trang 197 Sắp xếp mảng theo Mã sản phẩm bằng Shaker Sort.
Shaker Sort duyệt từ đầu đến cuối mảng và so sánh 2 phần tử liên tiếp nhau và đưa về đúng vị trí Rồi duyệt ngược từ cuối mảng về và cũng so sánh 2 phần tử liên tiếp Như vậy sau mỗi lần lặp phần tử lớn nhất và nhỏ nhất trong đoạn chưa được sắp xếp sẽ đượcđưa về đúng vị trí.
Trang 208 Sắp xếp mảng theo Mã kho bằng Selection Sort.
Selection Sort sẽ tìm phần tử nhỏ nhất trong đoạn chưa được sắp xếp và đưa về cuối đoạn đã được sắp xếp
9 Sắp xếp mảng theo Mã sản phẩm bằng Interchange Sort.
Thuật toán Interchange Sort sẽ bắt đầu duyệt từ phần tử đầu tiên và so sánh nó với tất cả các phần tử còn lại trong đoạn chưa được sắp xếp và thực hiện đổi chỗ nếu cần thiết Sau mỗi vòng lặp phần tử nhỏ nhất trong đoạn chưa được sắp xếp sẽ được đưa về
đầu
Trang 2110 Sắp xếp mảng theo Mã kho bằng BubbleSort.
Thuật toán sắp xếp bubble sort thực hiện sắp xếp dãy số bằng cách lặp lại công việc đổi chỗ 2 số liên tiếp nhau nếu chúng đứng sai vị trí Sau mỗi vòng lặp phần tử lớn nhất sẽ được đưa về cuối đoạn chưa được sắp xếp.
11 Sắp xếp mảng theo Ngày kiểm tra bằng Insertion Sort.
Thuật toán sắp xếp chèn thực hiện sắp xếp dãy số theo cách duyệt từng phần tử và chèn từng phần tử đó vào đúng vị trí trong mảng con (dãy số từ đầu đến phần tử phía trước nó) đã sắp xếp sao cho dãy số trong mảng sắp đã xếp đó vẫn đảm bảo tính chất của
Trang 22một dãy số tăng dần.
12 Sắp xếp mảng theo Lượng tồn bằng Merge Sort.
Thuật toán này chia mảng cần sắp xếp thành 2 nửa Tiếp tục lặp lại việc này ở các nửa mảng đã chia Sau cùng gộp các nửa đó thành mảng đã sắp xếp
Trang 23Hàm merge() được sử dụng để gộp hai nửa mảng Hàm merge(arr, l, m, r) là tiến trình quan trọng nhất sẽ gộp hai nửa mảng thành 1 mảng sắp xếp, các nửa mảng là arr[l…m] và arr[m+1…r] sau khi gộp sẽ thành một mảng duy nhất đã sắp xếp
Trang 2413 Sắp xếp mảng theo Lượng tồn bằng Quick Sort.
Quick Sort chọn một phần tử trong mảng làm điểm đánh dấu(pivot) Thuật toán sẽ thực hiện chia mảng thành các mảng con dựa vào pivot đã chọn Việc lựa chọn pivot ảnh hưởng rất nhiều tới tốc độ sắp xếp Nhưng máy tính lại không thể biết khi nào thì nên chọn theo cách nào.
Trang 2514 Kiểm thử các tính năng của chương trình.
14.1 Menu các lựa chọn cho người dùng.
Trang 2614.2 Hàm main().
Trang 2814.3 Kiểm thử nhập dữ liệu.1 Nhập dữ liệu từ bàn phím.
Trang 292 Nhập dữ liệu từ file.
14.4 Kiểm thử các tính năng tìm kiếm và sắp xếp.1 Xuất mảng.
Trang 302 Tìm kiếm sản phẩm theo mã sản phẩm bằng thuật toán Linear Search.
3 Tìm kiếm sản phẩm theo Mã sản phẩm bằng thuật toán Binary Search.
Trang 314 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Linear Search.
5 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Binary Search.
Trang 326 Sắp xếp mảng theo Mã sản phẩm bằng Shaker Sort.
7 Sắp xếp mảng theo Mã kho bằng Selection Sort.
Trang 338 Sắp xếp mảng theo Mã sản phẩm bằng Interchange Sort.
Trang 349 Sắp xếp mảng theo Mã kho bằng Bubble Sort.
Trang 3510 Sắp xếp mảng theo Ngày kiểm tra bằng Insertion Sort.
Trang 3611 Sắp xếp mảng theo Lượng tồn bằng Merge Sort.
Trang 3812 Sắp xếp mảng theo Lượng tồn bằng Quick Sort.
Chương III Tìm kiếm và sắp xếp trênDanh sách liên kết đơn.
1 Định nghĩa DSLK.
Danh sách liên kết đơn gồm có 1 Node head trỏ vào phần tử đầu tiên trong DSLK và 1 Node tail trỏ vào phần tử cuối cùng trong
Trang 39DSLK Ngoài ra có 1 biến size kiểu nguyên để tiện cho việc đếm số lượng phần tử trong DSLK
Ưu điểm của DSLK là tính linh động, ta có thể thay đổi kích thước của DSLK thoải mái nhưng bù lại nhược điểm của DSLK là tốcđộ truy cập chậm, không thể truy cập bằng chỉ số mà phải duyệt lầnlượt từ phần tử đầu đến phần tử cần truy cập.
Mỗi Node lưu trữ 1 biến data có kiểu dữ liệu TONKHO và 1 con trỏ next trỏ đến phần tử tiếp theo.
2 Một số thao tác trên DSLK.
2.1 Tạo mới một Node.
Hàm tạo mới một Node với data và con trỏ next được truyền vào mặc định là NULL
Trang 402.2 Khởi tạo DSLK rỗng.
Để khởi tạo DSLK ta gán con trỏ head và tail = NULL và kích thước = 0.
2.3 Thêm 1 node vào cuối DSLK.
Nếu DSLK rỗng thì thêm vào đầu, nếu không thì thêm vào cuối.
2.4 Truy cập con trỏ giữa DSLK.
Hàm này trả về con trỏ trỏ vào phần tử nằm giữa DSLK.
Trang 412.5 Truy cập con trỏ cuối DSLK.
3 Nhập DSLK.
Hàm nhập 1 list các sản phẩm tồn kho Mỗi lần lặp sẽ nhập dữliệu cho biến TONKHO và thêm sản phẩm này vào cuối DSLK.
a Nhập từ bàn phím.
Trang 42Duyệt qua từng phần tử trong DSLK đến khi tìm thấy hoặc đến hết DSLK.
Trang 436 Tìm kiếm sản phẩm theo Mã sản phẩm bằng thuật toán Binary Search.
Chặt nhị phân trên DSLK đến khi tìm thấy hoặc không thể chặt nhỏ hơn.
Trang 447 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Linear Search.
Duyệt qua từng phần tử trong DSLK đến khi tìm thấy hoặc đến hết DSLK.
8 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Binary Search.
Chặt nhị phân trên DSLK đến khi tìm thấy hoặc không thể chặt nhỏ hơn.
Trang 459 Sắp xếp DSLK theo Mã kho bằng Selection Sort.
Selection Sort sẽ tìm phần tử nhỏ nhất trong đoạn chưa được sắp xếp và đưa về cuối đoạn đã được sắp xếp.
10 Sắp xếp DSLK theo Mã sản phẩm bằng Interchange Sort.
Thuật toán Interchange Sort sẽ bắt đầu duyệt từ phần tử đầu tiên và so sánh nó với tất cả các phần tử còn lại trong đoạn chưa được sắp xếp và thực hiện đổi chỗ nếu cần thiết Sau mỗi vòng lặp phần tử nhỏ nhất trong đoạn chưa được sắp xếp sẽ được đưa về đầu.
Trang 4611 Sắp xếp DSLK theo Mã kho bằng BubbleSort.
Thuật toán sắp xếp bubble sort thực hiện sắp xếp dãy số bằng cách lặp lại công việc đổi chỗ 2 số liên tiếp nhau nếu chúng đứng sai vị trí Sau mỗi vòng lặp phần tử lớn nhất sẽ được đưa về cuối đoạn chưa được sắp xếp.
12 Sắp xếp DSLK theo Ngày kiểm tra bằng Insertion Sort.
Thuật toán sắp xếp chèn thực hiện sắp xếp dãy số theo cách duyệt từng phần tử và chèn từng phần tử đó vào đúng vị trí trong mảng con (dãy số từ đầu đến phần tử phía trước nó) đã sắp xếp sao cho dãy số trong mảng sắp đã xếp đó vẫn đảm bảo tính chất của một dãy số tăng dần.
Trang 4813 Sắp xếp DSLK theo Lượng tồn bằng Merge Sort.
Thuật toán này chia mảng cần sắp xếp thành 2 nửa Tiếp tục lặp lại việc này ở các nửa mảng đã chia Sau cùng gộp các nửa đó thành mảng đã sắp xếp
Hàm merge() được sử dụng để gộp hai nửa mảng Hàm merge(arr, l, m, r) là tiến trình quan trọng nhất sẽ gộp hai nửa mảng thành 1 mảng sắp xếp, các nửa mảng là arr[l…m] và arr[m+1…r] sau khi gộp sẽ thành một mảng duy nhất đã sắp xếp.
Trang 4914 Sắp xếp DSLK theo Lượng tồn bằng Quick Sort.
Quick Sort chọn một phần tử trong mảng làm điểm đánh dấu(pivot) Thuật toán sẽ thực hiện chia mảng thành các mảng con dựa vào pivot đã chọn Việc lựa chọn pivot ảnh hưởng rất nhiều tới tốc độ sắp xếp Nhưng máy tính lại không thể biết khi nào thì nên chọn theo cách nào.
Trang 5115 Kiểm thử các tính năng của chương trình.
15.1 Menu các lựa chọn cho người dùng.
15.2 Hàm main().
Trang 5415.3 Kiểm thử nhập dữ liệu.1 Nhập dữ liệu từ bàn phím.
Trang 552 Nhập dữ liệu từ file.
15.4 Kiểm thử các tính năng tìm kiếm và sắp xếp.1 Xuất DSLK.
Trang 562 Tìm kiếm sản phẩm theo mã sản phẩm bằng thuật toán Linear Search.
3 Tìm kiếm sản phẩm theo Mã sản phẩm bằng thuật toán Binary Search.
Trang 574 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Linear Search.
5 Tìm kiếm vị trí sản phẩm theo Mã kho bằng thuật toán Binary Search.
Trang 586 Sắp xếp DSLK theo Mã kho bằng Selection Sort.
7 Sắp xếp DSLK theo Mã sản phẩm bằng Interchange Sort.
Trang 598 Sắp xếp DSLK theo Mã kho bằng Bubble Sort.
Trang 609 Sắp xếp DSLK theo Ngày kiểm tra bằng Insertion Sort.
Trang 6110 Sắp xếp DSLK theo Lượng tồn bằng Merge Sort.
Trang 6211 Sắp xếp DSLK theo Lượng tồn bằng Quick Sort.