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 12 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,59 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

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

Giả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 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 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 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ề

ý 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 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ự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 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ự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 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ưở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 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ác nghị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 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 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

 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 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ỉ

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 37

Hàm main test

Chạy kết quả

Trang 38

3.2.3 Xuất DSLK

 Xuất thông tin

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 trongNode đó, 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 Sort3.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

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 54

3.10.3 Chạy kết quả

Ngày đăng: 13/08/2022, 12:24

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w