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

Thông tin cơ bản

Định dạng
Số trang 63
Dung lượng 18,77 MB

Nội dung

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ã KhoMaKho, Lượng sản phẩm tồn trong kho LuongTon, Chi phí

Trang 1

Danh sách liên kết đơn”

Giảng viên hướng

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

7 Sắp xếp mảng theo Mã sản phẩm bằng Shaker Sort 19

8 Sắp xếp mảng theo Mã kho bằng Selection Sort 21

Trang 3

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

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

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

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

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

1 Nhập dữ liệu từ bàn phím 30

2 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

6 Sắp xếp mảng theo Mã sản phẩm bằng Shaker Sort 34

7 Sắp xếp mảng theo Mã kho bằng Selection Sort 34

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

35

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

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

37

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

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

2 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

9 Sắp xếp DSLK theo Mã kho bằng Selection Sort 48

10 Sắp xếp DSLK theo Mã sản phẩm bằng Interchange Sort 48

11 Sắp xếp DSLK theo Mã kho bằng Bubble Sort 49

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

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

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

15 Kiểm thử các tính năng của chương trình 5515.1 Menu các lựa chọn cho người dùng 5515.2 Hàm main() 56

Trang 5

15.3 Kiểm thử nhập dữ liệu 60

1 Nhập dữ liệu từ bàn phím 60

2 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

6 Sắp xếp DSLK theo Mã kho bằng Selection Sort 64

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

64

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

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

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

11 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ạngthá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 sinh viê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ấu

trú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

Trang 10

● 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ên

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 16

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 17

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

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 Bubble Sort.

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ên

Danh 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

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 Bubble Sort.

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

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w