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 các môn học bao gồm các thông tin: Mã môn học MaMH, Tên môn học TenMH, Số tín chỉ SoTC
Trang 1BÔ GI O D C V Đ O T OTRƯỜNG Đ I HỌC T I CHÍNH – MARKETING
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP ĐỒ ÁN CẤU TRÚC
DỮ LIỆU VÀ GIẢI THUẬT
Giảng viên hướng dẫn: Nguyễn Quốc Thanh
Môn học thực hiện: Nguyễn Xuân Tính
Mã số môn học: 2121001038
Mã lớp học phần: 2121112001202
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 2LỜI CẢM ƠN
Đầu tiên, em xin chân thành cảm ơn và tri ân sâu sắc đến qúy thầy côTrường Đại học Tài Chính – Marketing , đặc biệt là quý thầy cô khoa Côngnghệ thông tin và thầy Nguyễn Quốc Thanh đã dạy dỗ tận tình cho chúng emnhững tháng ngày vừa qua khi mới là sinh viên năm nhất còn bỡ ngỡ về một môitrường học tập mới , thầy cô luôn quan tâm chúng em hỏi chúng em không hiểuchỗ nào thì chia sẻ màn hình thầy cô chỉ cho chúng em
Thầy đã truyền đạt cho chúng em rất nhiều kiến thức bổ ích, giúp chúng emngày càng hoàn thiện bản thân mình hơn Cũng là đồ án môn cấu trúc dữ liệu vàgiải thuật thì cũng một lần nữa em xinh chúc tất cả các quý thầy cô giáo vàThs.Nguyễn Quốc Thanh ngày càng mạnh khỏe
Em xin chân thành cảm ơn!
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 3MỤC LỤC
CHƯƠNG I: GIỚI THIỆU 1
1.1 Giới thiệu đề bài 1
1.2 Cấu trúc (khai báo/định nghĩa cấu trúc) 1
1.3 Dữ liệu mẫu 2
1.4 Các chức năng trên mảng cấu trúc 2
CHƯƠNG II: TÌM KIẾM V SẮP XẾP TRÊN MẢNG CẤU TRÚC 4
2.1 Nhập danh sách môn học 4
a) Chương trình con 4
b) Kiểm tra (hàm Main kiểm tra ctc) 5
c) Kết quả chạy 5
2.2 Xuất danh sách môn học 5
a) Chương trình con 5
b) Kiểm tra (hàm Main kiểm tra ctc) 6
c) Kết quả chạy 7
2.3 Tìm kiếm thông tin môn học theo mã môn học dùng Liner Search 7
a) Chương trình con 7
a) Kiểm tra (hàm Main kiểm tra ctc) 8
b) Kết quả chạy 9
2.4 Tìm kiếm thông tin môn học theo mã môn học dùng Binary Search 9
a) Chương trình con 9
b) Kiểm tra (hàm Main kiểm tra ctc) 10
c) Kết quả chạy 11
2.5 Tìm kiếm thông tin môn học theo Tên dùng Liner Search 11
a) Chương trình con 11
b) Kiểm tra (hàm Main kiểm tra ctc) 11
c) Kết quả chạy 12
2.6 Tìm kiếm thông tin môn học theo Tên dùng Binary Search 12
a) Chương trình con 12
b) Kiểm tra (hàm Main kiểm tra ctc) 13
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 4c) Kết quả chạy 14
2.7 Hàm hoán vị 14
2.8 Sắp xếp danh sách theo MaMH dùng hàm Shaker Sort 15
a) Chương trình con 15
b) Kiểm tra (hàm Main kiểm tra ctc) 16
c) Kết quả chạy 16
2.9 Sắp xếp danh sách theo MaMH dùng hàm Selection Sort 16
a) Chương trình con 16
b) Kiểm tra (hàm Main kiểm tra ctc) 17
c) Kết quả chạy 18
2.10 Sắp xếp danh sách theo Tên dùng hàm Interchange Sort 18
a) Chương trình con 18
b) Kiểm tra (hàm Main kiểm tra ctc) 18
c) Kết quả chạy 19
2.11 Sắp xếp danh sách theo Khóa học dùng hàm Bubble Sort 19
a) Chương trình con 20
b) Kiểm tra (hàm Main kiểm tra ctc) 20
c) Kết quả chạy 21
2.12 Sắp xếp danh sách theo ĐTB dùng hàm Insertion Sort 21
a) Chương trình con 21
b) Kiểm tra (hàm Main kiểm tra ctc) 22
c) Kết quả chạy 23
2.13 Sắp xếp danh sách theo Tín chỉ dùng hàm Quick Sort 23
a) Chương trình con 23
b) Kiểm tra (hàm Main kiểm tra ctc) 24
c) Kết quả chạy 25
2.14 Sắp xếp danh sách theo MAMH dùng hàm Merge Sort 25
a) Chương trình con 25
b) Kiểm tra (hàm Main kiểm tra ctc) 29
c) Kết quả chạy 30
CHƯƠNG III: TÌM KIẾM V SẮP XẾP TRÊN DSLK 31
3.1 Khởi tạo danh sách liên kết và các chương trình con hỗ trợ 31
3.2 Nhập thông tin môn học 33
a) Chương trình con 33
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 5b) Kiểm tra (hàm Main kiểm tra ctc) 33
c) Kết quả chạy 35
3.3 Xuất thông tin môn học 35
a) Chương trình con 35
b) Kiểm tra (hàm Main kiểm tra ctc) 36
c) Kết quả chạy 38
3.4 Đếm số phần tử có trong danh sách thông tin môn học 38
a) Chuong trình con 38
b) Kiểm tra (hàm Main kiểm tra ctc) 38
c) Kết quả chạy 40
3.5 Tìm kiếm thông tin môn học theo mã môn học bằng Liner Search 40
a) Chương trình con 40
b) Kiểm tra (hàm Main kiểm tra ctc) 41
c) Kết quả chạy 43
3.6 Tìm kiếm thông tin môn học theo tên bằng Liner Search 43
a) Chương trình con 43
b) Kiểm tra (hàm Main kiểm tra ctc) 43
c) Kết quả chạy 45
3.7 Hàm hoán vị hỗ trợ cho một số hàm sắp xếp 45
3.8 Sắp xếp thông tin môn học theo MaMH bằng Selection Sort 46
a) Chương trình con 46
b) Kiểm tra (hàm Main kiểm tra ctc) 47
c) Kết quả chạy 48
3.9 Sắp xếp thông tin môn học theo mã môn học bằng Interchange Sort 48
a) Chương trình con 48
b) Kiểm tra (hàm Main kiểm tra ctc) 49
c) Kết quả chạy 51
3.10 Sắp xếp thông tin môn học theo mã môn học bằng Bubble Sort 51 a) Chương trình con 51
b) Kiểm tra (hàm Main kiểm tra ctc) 52
c) Kết quả chạy 54
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 63.11 Sắp xếp thông tin môn học theo mã môn học bằng Insertion
a) Chương trình con 54b) Kiểm tra (hàm Main kiểm tra ctc) 55c) Kết quả chạy 563.12 Sắp xếp thông tin môn học theo mã môn học bằng Quick
a) Chương trình con 56b) Kiểm tra (hàm Main kiểm tra ctc) 58c) Kết quả chạy 60
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 7DANH MỤC BẢNG, HÌNH Ả
Bảng 1 1 Dữ liệu mẫu 2
Y Hình 2 1 Kết quả thông tin môn học 5
Hình 2 2 Xuất thông tin môn học 7
Hình 2 3 Tìm kiếm mã môn học bằng Liner Search 9
Hình 2 4 Tìm kiếm mã môn học bằng Binary Search 11
Hình 2 5 Tìm kiếm tên môn học bằng Liner Search 12
Hình 2 6 Tìm kiếm tên môn học bằng Binary Search 14
Hình 2 7 Sắp xếp mã môn học bằng Shaker Sort 16
Hình 2 8 Sắp xếp mã môn học bằng Selection Sort 18
Hình 2 9 Sắp xếp tên môn học bằng Interchange Sort 19
Hình 2 10 Sắp xếp mã môn học bằng Bubble Sort 21
Hình 2 11 Sắp xếp theo tên môn học bằng Insertion Sort 23
Hình 2 12 Sắp xếp tín chỉ bằng Quick Sort 25
Hình 2 13 Sắp xếp mã môn học bằng Merge Sort 30
Hình 3 1 Kết quả nhập thông tin môn học vào DSLK 35
Hình 3 2 Kết quả xuất danh sách môn học ra màn hình 38
Hình 3 3 Đếm số lượng môn học có trong danh sách 40
Hình 3 4 Tìm kiếm mã môn học có trong danh sách đã nhập ở trên 43
Hình 3 5 Tìm kiếm tên môn học có trong danh sách đã nhập ở trên 45
Hình 3 6 Sắp xếp mã môn học bằng Selection Sort 48
Hình 3 7 Sắp xếp mã môn học bằng Interchange Sort 51
Hình 3 8 Sắp xếp mã môn học bằng Bubble Sort 54
Hình 3 9 Sắp xếp mã môn học bằng Insertion Sort 56
Hình 3 10 Sắp xếp mã môn học bằng Quick Sort 60
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 8CHƯƠNG I: 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ý thông tin các môn học bao gồm các thông tin: Mã môn học (MaMH), Tên môn học (TenMH), Số tín chỉ (SoTC), Số giờ lý thuyết (GioLT), Số giờ thựchành (GioTH), Số giờ tự học (TuHoc)
1.2 Cấu trúc (khai báo/định nghĩa cấu trúc)
Thông tin môn học cần quản lý gồm:
MaMH: Mã số môn học, gồm một chuỗi ký tự số có chiều dài 10 ký tự
TenMH: Tên môn học, chỉ quản lý các tên Tiếng Việt với chiều dài 15
ký tự
SoTC: Số tín chỉ, cho biết số lượng tín chỉ của môn học
GioLT: Giờ lí thuyết, số giờ học lí thuyết của môn học
GioTH: Giờ thực hành, số giờ học thực hành của môn học
Cấu trúc dữ liệu hỗ trợ quản lý thông tin môn học:
Trang 9float GioTH;
float Tuhoc;
};
1.3 Dữ liệu mẫu
Xuất danh sách môn học
Tìm thông tin môn học theo mã môn học (dùng hàm Liner Searrch)
Tìm thông tin môn học theo mã mã môn học (dùng hàm Binary Search)
Tìm thông tin môn học theo Tên môn học (dùng hàm Liner Searrch)
Tìm thông tin môn học theo Tên môn học (dùng hàm Binary Searrch)
Sắp xếp danh sách theo Mã môn học dùng hàm Shaker Sort
Sắp xếp danh sách theo Mã môn học dùng hàm Selection Sort
Sắp xếp danh sách theo Tên môn học dùng hàm Interchange Sort
Sắp xếp danh sách theo Mã môn học dùng hàm Bubble Sort
Sắp xếp danh sách theo Tên môn học dùng hàm Insertion Sort
Sắp xếp danh sách theo Tín chỉ dùng hàm Quick Sort
Sắp xếp danh sách theo Mã môn học dùng hàm Merge Sort
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 10Các chức năng trên danh sách liên kếtNhập danh sách môn học.
Xuất danh sách môn học
Tìm thông tin môn học theo Mã môn học dùng hàm Liner Search
Tìm thông tin môn học theo Tên môn học dùng hàm Liner Search
Sắp xếp danh sách theo Mã môn học dùng hàm Selection Sort
Sắp xếp danh sách theo Tên môn học dùng hàm Interchange Sort
Sắp xếp danh sách theo Tín chỉ dùng hàm Bubbler Sort
Sắp xếp danh sách theo Tên môn học dùng hàm Insertion Sort
Sắp xếp danh sách theo Mã môn học dùng hàm Quick Sort
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 11CHƯƠNG II: TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG CẤU TRÚC
2.1 Nhập danh sách môn học
a) Chương trình con
Để nhập danh sách môn học, cần xây dựng hai chương trình con gồm:
void nhap_o(MONHOC& a);: hỗ trợ nhập thông tin một môn họcgồm mã môn học, tên môn học, tín chỉ, giờ lý thuyết, giờ thực hành, tự học
void nhap_Mang(MONHOC a[], int n);: hỗ trợ nhập danh sách mônhọc
//Nh ập ô cho thông tin môn họcvoid nhap_o(MONHOC& a)
{cout << " Ma mon hoc:"; cin.getline(a.MaMH, 10); cout << "
Ten mon hoc:"; cin.getline(a.TenMH, 10); cout << " So tinchi:"; cin >> a.SoTC;
cout << " Gio li thuyet:"; cin >> a.GioLT; cout << "
Gio thuc hanh:"; cin >> a.GioTH; cout << " Tu hoc:"; cin >> a.Tuhoc; cin.ignore();
}//Nh ập Thông tin môn họcvoid nhap_Mang(MONHOC a[], int n){
for (int i = 0; i < n; i++){
cout << "\n Nhap sinh vien thu " << i << ":" <<
Trang 12b) Kiểm tra (hàm Main kiểm tra ctc)
void Main(){
void xuat_Mang(MONHOC a[], int n);
//Xu ất ô cho thông tin môn họcvoid xuat_o(MONHOC a)
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 13{cout << " Ma mon hoc:" << a.MaMH << endl; cout << "
Ten mon hoc:" << a.TenMH << endl; cout << " So tin chi:" << a.SoTC << endl; cout << " Gio li thuyet:" <<
a.GioLT << endl; cout << " Gio thuc hanh:" << a.GioTH
<< endl; cout << " Tu hoc:" << a.Tuhoc << endl;
}//Xu ất thông tin môn họcvoid xuat_Mang(MONHOC a[], int n){
cout << " ==========> Danh sach mon hoc:
b) Kiểm tra (hàm Main kiểm tra ctc)
void Main(){
Trang 14c) Kết quả chạy
Hình 2 2 Xuất thông tin môn học
2.3 Tìm kiếm thông tin môn học theo mã môn học dùng Liner Search
a) Chương trình con
int LinerSearch(MONHOC a[], int n, char x[]):
Tìm kiếm thông tin môn học theo MaMH
//Dùng LinearSearch để tìm mã môn họcint LinearSearch(MONHOC a[], int n, char x[]){
for (int i = 0; i < n; i++)
if (strcmp(a[i].MaMH, x) == 0)return i;
return -1;
}
a) Kiểm tra (hàm Main kiểm tra ctc)
void Main(){
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 15cout << "\n ==========> Ket qua tim kiem ma mon hoc bang LinerSearch: <==========\n ";
xuat_o(dsmh[i]);
}else
cout << "\n ==========> Khong co thong tin
<==========";
}
b) Kết quả chạy
Hình 2 3 Tìm kiếm mã môn học bằng Liner Search
2.4 Tìm kiếm thông tin môn học theo mã môn học dùng Binary Search
a) Chương trình con
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 16int BinarySearch(MONHOC a[], int n, char x[]):
Tìm kiếm thông tin môn học theo MaMH
//Hàm tìm ki ếm BinarySearch theo MAMHint BinarySearch(MONHOC a[], int n, char x[]){
int left = 0;
int right = n - 1;
int mid = (left + right) / 2;
while (left <= right && strcmp(a[mid].MaMH, x) != 0){
if (strcmp(x, a[mid].MaMH) < 0) right = mid - 1;
else left = mid + 1;
mid = (left + right) / 2;
Trang 17cout << "\n ==========> Khong co thong tin
<==========";
}
e) Kết quả chạy
Hình 2 4 Tìm kiếm mã môn học bằng Binary Search
2.5 Tìm kiếm thông tin môn học theo Tên dùng Liner Search
a) Chương trình con
int LinerSearch2(MONHOC a[], int n, char x[]):
Tìm kiếm thông tin môn học theo tên
//Hàm LinerSearch theo tên môn họcint LinerSearch2(MONHOC a[], int n, char x[]){
int i = 0;
while (strcmp(a[i].TenMH, x) != 0 &&
strcmp(a[n - i].TenMH, x) != 0 && i < n / 2) i++;
if (strcmp(a[i].TenMH, x) == 0)return i;
if (strcmp(a[n - i].TenMH, x) == 0)return (n - i);
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 18return (-1);
}
f) Kiểm tra (hàm Main kiểm tra ctc)
void Main(){
//kiểm tra linearsearch 2
cout << "Nhap TenMH can tim:";
cin.getline(TenMH, 3);
int i = LinearSearch2(dsmh, spt, TenMH); if (i
>= 0){
cout << " ==========> Ket qua tim kiem:
<==========" << endl;
xuat_o(dsmh[i]);
}else cout << " ==========> Khong co thong tin
<==========" << endl;
}
g) Kết quả chạy
Hình 2 5 Tìm kiếm tên môn học bằng Liner Search
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 192.6 Tìm kiếm thông tin môn học theo Tên dùng Binary Search
int l = 0; int r = n - 1; int mid = (l + r) /2; while (l <= r && strcmp(a[mid].TenMH, x) !
= 0){
Trang 20TIEU LUAN MOI download : skknchat123@gmail.com
Trang 21//Tìm kiếm bằng BinarySearch theo Tên môn học int k =BinarySearch2(dsmh, spt, TenMH); if (k >= 0)
cout << "\nKhong co thong tin";
MONHOC temp = a;a
= b;
b = temp;
}
2.8 Sắp xếp danh sách theo MaMH dùng hàm Shaker Sort
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 22cout << " Ma mon hoc:" << a MaMH << endl; cout << " Ten mon hoc:" << a TenMH << endl; cout << " So tin chi:" << a SoTC << endl; cout << " Gio li thuyet:" <<
a GioLT << endl; cout << " Gio thuc hanh:" << a GioTH
<< endl; cout << " Tu hoc:" << a Tuhoc << endl;
}
Trang 23TIEU LUAN//Xu ấMOItthôngdownloadtinmônh
ọ:cskknchat123@gmail.com
Trang 24void xuat_Mang(MONHOC a [], int n ) {
cout << " ==========> Danh sach mon hoc:
b) Kiểm tra (hàm Main kiểm tra ctc)
void Main() {
Trang 25c) Kết quả chạy
2.3 Tìm kiếm thông tin môn học theo mã môn học dùng Liner Search
a) Chương trình con
int LinerSearch(MONHOC a [], int n , char x []): Tìm
TIEU LUANkiếmthôngMOItin downloadmônhọctheoMaMH:skknchat123@gmail..com
Trang 26//Dùng LinearSearch để tìm mã môn học int LinearSearch(MONHOC a [], int n , char x []) {
for (int i = 0; i < n ; i++)
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 27cout << "\n ==========> Ket qua tim kiem ma mon hoc bang LinerSearch: <==========\n ";
xuat_o(dsmh[i]);
} else
cout << "\n ==========> Khong co thong tin
<==========";
}
b) Kết quả chạy
2.4 Tìm kiếm thông tin môn học theo mã môn học dùng Binary Search
TIEU LUAN MOI download : skknchat123@gmail.com
a) Chương trình con
Trang 28a) Chương trình con
int BinarySearch(MONHOC a [], int n , char x []): Tìm kiếm thông tin môn học theo MaMH.
TIEU LUAN//HàmMOItìm
kidownloadếmBinarySearch:skknchat123@gmailtheoMAMH.com
Trang 29int BinarySearch(MONHOC a [], int n , char x []) {
int left = 0;
int right = n - 1;
int mid = (left + right) / 2;
while (left <= right && strcmp( a [mid].MaMH, x ) != 0) {
if (strcmp( x , a [mid].MaMH) < 0) right = mid - 1;
else left = mid + 1;
mid = (left + right) / 2;
Trang 30cout << "\n ==========> Khong co thong tin
Trang 31Hình 2 4 Tìm kiếm mã môn học bằng Binary Search
2.5 Tìm kiếm thông tin môn học theo Tên dùng Liner Search
int i = 0;
while (strcmp( a [i].TenMH, x ) != 0 &&
strcmp( a [ n - i].TenMH, x ) != 0 && i < n / 2) i++;
if (strcmp( a [i].TenMH, x ) == 0) return i;
if (strcmp( a [ n - i].TenMH, x ) == 0) return ( n - i);
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 32return (-1);
}
f) Kiểm tra (hàm Main kiểm tra ctc)
void Main() {
//kiểm tra linearsearch 2
cout << "Nhap TenMH can tim:";
cin.getline(TenMH, 3);
int i = LinearSearch2(dsmh, spt, TenMH); if (i
>= 0) {
cout << " ==========> Ket qua tim kiem:
<==========" << endl;
xuat_o(dsmh[i]);
}
TIEU LUAN MOI download : skknchat123@gmail.com
else cout << " > Khong co
Trang 33else cout << " ==========> Khong cothong tin <==========" << endl;
}
TIEU LUAN MOI download : skknchat123@gmail.com
Trang 342.6 Tìm kiếm thông tin môn học theo Tên dùng Binary Search
a) Chương trình con
int BinarySearch2(MONHOC a [], int n , char
x []): Tìm kiếm thông tin môn học theo tên //Hàm BinarySearch theo tên môn học int BinarySearch2(MONHOC a [], int n , char x []) {
int l = 0; int r = n - 1; int mid = (l + r) / 2; while (l <= r &&
strcmp( a [mid].TenMH, x ) != 0) {