1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ĐỒ án môn học cấu TRÚC dữ LIỆU và GIẢI THUẬT

54 103 0

Đ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 54
Dung lượng 3,23 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

TRƯỜNG ĐẠI HỌC TÀI CHÍNH – MARKETING

ĐỒ ÁN MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI

THUẬT

Giảng viên : Nguyễn Quốc ThanhSinh viên thực hiện : Đỗ Tường Vy

MSSV : 2021010354Lớp : 20DHT05

Trang 2

ĐỒ ÁN MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI

THUẬT

Giảng viên : Nguyễn Quốc ThanhSinh viên thực hiện : Đỗ Tường Vy

MSSV : 2021010354Lớp : 20DHT05

TPHCM - 12/2020

Trang 3

MỤ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 ớithi 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 5

Lờ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 6

dạ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 7

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

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

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 a[], int n) hỗ trợ nhập danh sách đồng hồ

Trang 11

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

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:

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 15

2.3.2 Kiểm tra

Trang 16

Hà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 19

2.4.2 Kiểm tra

Trang 20

Hà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ề

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ỗi lần sắp xếp sẽ thựchiệ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 trong chương trình con

Trang 22

2.5.2 Kiểm tra

Trang 23

Hà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ự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

void hoanvi(dongho &a, dongho &b): hàm hoán vị hỗ trợ việc hoán vị các phần tử trong chương trình con SelectionSort

Trang 24

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

2.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ựctiế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ơnphầ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 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 26

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

2.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ưở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

void hoanvi(dongho &a, dongho &b): hàm hoán vị hỗ trợ cho việc hoán vị cácnghịch thế trong chương trình con Bubble Sort

Trang 28

Hà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 29

2.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ácnghịch thế trong chương trình con Insertion Sort

Trang 30

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

2.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 chia mả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 32

2.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Định nghĩa nút

Định nghĩa DSLK

3.1.1 Định nghĩa phần thông tin

3.1.2 Định nghĩa nút

Nút là 1 phần tử của danh sách gồm 2 phần

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

Trang 35

3.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ỉ

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 37

Hàm main test

Chạy kết quả

Trang 38

3.2.3 Xuất DSLK

Xuất thông tin

Trang 39

In Node ra màn hình

In danh sách liên kết ra màn hình

Hàm main kiểm tra

Trang 40

Nguyên tắc hoạt động

Trang 41

So 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 trong Node đó, nếu sai chuyển sang so sách với Node kế tiếp

3.3.2 Kiểm tra

Trang 42

3.3.3 Chạy kết quả

Trang 43

3.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 44

3.4.3 Chạy kết quả

Trang 45

3.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 46

3.6.3 Chạy kết quả

Trang 47

3.7 Sắp xếp danh sách theo Mã sản phẩm dùng Interchange Sort

Trang 48

3.7.3 Chạy kết quả

Trang 49

3.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 50

3.8.2 Kiểm tra

Trang 51

3.9 Sắp xếp danh sách theo thời gian Bảo hành dùng Insertion Sort

3.9.1 Chương trình con

3.9.2 Kiểm tra

Trang 52

3.9.3 Chạy kết quả

Trang 53

3.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

Ý tưởng: Chia các phần tử trong DSLK đơn ra thành 2 danh sách con và 1

node cờ (node x trong vd dưới đây) 1 danh sách l1 sẽ chứa các node có trường data<= 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 54

3.10.3 Chạy kết quả

Ngày đăng: 11/08/2022, 10:13

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w