1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập lớn môn cấu trúc dữ liệu và giải thuật đề tài cài đặt một số thuật toán tìm kiếm và sắp xếp trên mảng cấu trúc và danh sách liên kết đơn

63 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Trang 2

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 3

9 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 4

Chươ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 5

15.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 6

Chươ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 7

2.3 Định nghĩa cấu trúc tồn kho.

Trang 8

Kế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 9

2.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 10

4 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 12

Chương II Tìm kiếm và sắp xếp trênMảng cấu trúc.

Trang 13

Kế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 14

Kế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 15

Kế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 18

Kết quả gọi hàm:

Trang 19

7 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 20

8 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 21

10 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 22

mộ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 23

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 24

13 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 25

14 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 26

14.2 Hàm main().

Trang 28

14.3 Kiểm thử nhập dữ liệu.1 Nhập dữ liệu từ bàn phím.

Trang 29

2 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 30

2 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 31

4 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 32

6 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 33

8 Sắp xếp mảng theo Mã sản phẩm bằng Interchange Sort.

Trang 34

9 Sắp xếp mảng theo Mã kho bằng Bubble Sort.

Trang 35

10 Sắp xếp mảng theo Ngày kiểm tra bằng Insertion Sort.

Trang 36

11 Sắp xếp mảng theo Lượng tồn bằng Merge Sort.

Trang 38

12 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 39

DSLK 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 40

2.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 41

2.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 42

Duyệt qua từng phần tử trong DSLK đến khi tìm thấy hoặc đến hết DSLK.

Trang 43

6 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 44

7 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 45

9 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 46

11 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 48

13 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 49

14 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 51

15 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 54

15.3 Kiểm thử nhập dữ liệu.1 Nhập dữ liệu từ bàn phím.

Trang 55

2 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 56

2 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 57

4 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 58

6 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 59

8 Sắp xếp DSLK theo Mã kho bằng Bubble Sort.

Trang 60

9 Sắp xếp DSLK theo Ngày kiểm tra bằng Insertion Sort.

Trang 61

10 Sắp xếp DSLK theo Lượng tồn bằng Merge Sort.

Trang 62

11 Sắp xếp DSLK theo Lượng tồn bằng Quick Sort.

Ngày đăng: 02/07/2024, 17:26

TỪ KHÓA LIÊN QUAN

w