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Ô GIO DC V ĐO TOTRƯỜNG ĐI HỌC TI CHÍNH – MARKETING
KHOA CÔNG NGHỆ THÔNG TIN
THUẬT
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ộtmôi trường học tập mới , thầy cô luôn quan tâm chúng em hỏi chúng em khônghiểu chỗ 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!
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
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
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
Trang 63.11 Sắp xếp thông tin môn học theo mã môn học bằng InsertionSort 54
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
Sort 56
a) Chương trình con 56b) Kiểm tra (hàm Main kiểm tra ctc) 58c) Kết quả chạy 60
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
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ực hà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 9Số tín chỉ
Giờ lý thuyết
Giờ thực hành
Tự 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 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.
Trang 10Các chức năng trên danh sách liên kết
Nhậ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.
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ọc gồ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ôn học
//Nh p ô cho thông tin môn h cậ ọ
void nhap_o(MONHOC& )a
{
cout << " Ma mon hoc:"; cin.getline( MaMH, 10);a
cout << " Ten mon hoc:"; cin.getline( TenMH, 10);a
cout << " So tin chi:"; 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 cậ ọ
void nhap_Mang(MONHOC a[], int )n
Trang 12 void xuat_Mang(MONHOC [], a int n);
//Xu t ô cho thông tin môn h cấ ọ
void xuat_o(MONHOC )a
Hình 2 1 Kết quả thông tin môn học
Trang 13cout << " Ma mon hoc:" << MaMH a << endl;cout << " Ten mon hoc:" << TenMH a << endl;cout << " So tin chi:" << SoTC a << endl;
cout << " Gio li thuyet:" << a.GioLT << endl;cout << " Gio thuc hanh:" << GioTH a << endl;cout << " Tu hoc:" << a.Tuhoc << endl;
}
//Xu t thông tin môn h cấ ọ
void xuat_Mang(MONHOC a[], int )n
Trang 15//Tìm kiếm MaMH bằng linersearch
int i = LinearSearch(dsmh, spt, MaMH);
Trang 16 int 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 MAMHế
int BinarySearch(MONHOC a[], int , n char x[])
{
int left = 0;
int right = - 1;n
int mid = (left + right) / 2;
while (left <= right && strcmp( [mid].MaMH, ) != 0)a x{
if (strcmp( , [mid].MaMH) < 0) right = mid - 1;x aelse left = mid + 1;
mid = (left + right) / 2;
//Tìm Kiếm MaMH bằng BinarySearch
int j = BinarySearch(dsmh, spt, MaMH);
if (j >= 0)
Trang 17//Hàm LinerSearch theo tên môn h cọ
int LinerSearch2(MONHOC a[], int , n char x[])
Trang 18//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 timkiem: <==========" << 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
Trang 192.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 = - 1; n int mid = (l + r) / 2; while (l <= r && strcmp( [mid].TenMH, ) != 0)a x {
Trang 20//Tìm kiếm bằng BinarySearch theo Tên môn học
int k = BinarySearch2(dsmh, spt, TenMH);
2.8 Sắp xếp danh sách theo MaMH dùng hàm Shaker Sort
Hình 2 6 Tìm kiếm tên môn học bằng Binary Search
Trang 21cout << " Ma mon hoc:" << .MaMH a << endl; cout << " Ten mon hoc:" << .TenMH a << endl; cout << " So tin chi:" << .SoTC a << endl;
cout << " Gio li thuyet:" << a GioLT << endl; cout << " Gio thuc hanh:" << .GioTH a << endl; cout << " Tu hoc:" << a Tuhoc << endl;
}
//Xu t thông tin môn h c ấ ọ
0 0
Trang 22void xuat_Mang( MONHOC a [], int ) n
Trang 25//Tìm kiếm MaMH bằng linersearch
int i = LinearSearch(dsmh, spt, MaMH);
Trang 27int BinarySearch( MONHOC a [], int , n char x [])
{
int left = 0;
int right = - 1; n
int mid = (left + right) / 2;
while (left <= right && strcmp( [mid].MaMH, ) != 0) a x {
if (strcmp( , [mid].MaMH) < 0) right = mid - 1; x a else left = mid + 1;
mid = (left + right) / 2;
//Tìm Kiếm MaMH bằng BinarySearch
int j = BinarySearch(dsmh, spt, MaMH);
if (j >= 0)
0 0
Trang 292.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 c ọ
int LinerSearch2( MONHOC a [], int , n char x [])
Trang 30//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
0 0
Trang 31else 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
0 0
Trang 322.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 [])
Trang 33//Tìm kiếm bằng BinarySearch theo Tên môn học
int k = BinarySearch2(dsmh, spt, TenMH);
Trang 342.8 Sắp xếp danh sách theo MaMH dùng hàm Shaker Sort
Hình 2 6 Tìm kiếm tên môn học bằng Binary Search
0 0
Trang 35a) Chương trình con
void ShakerSort( MONHOC a [], int n ): Sắp xếp thông tin môn học theo MaMH.
//S p x p danh sách theo MaMH b ng ShakerSort ắ ế ằ
void ShakerSort( MONHOC a [], int ) n
hoanvi( a [i - 1], a [i]);
k = i;
}
0 0
Trang 36} left = k;
for int ( j = left; j < right; j++)
if (strcmp( [j].MaMH, [j + 1].MaMH) > 0) a a {
hoanvi( a [j], [j + 1]); a
k = j;
} right = k;
j) Kiểm tra (hàm Main kiểm tra ctc)
int Main()
{
//Kiểm tra Shaker Sort
0 0
Trang 37cout << "\n" ; cout << "\n ==========> Shaker Sort - Sap xep thong tin mon hoc theo Ma mon hoc
//S p x p danh sách theo MaMH b ng SelectionSort ắ ế ằ
Hình 2 7 Sắp xếp mã môn học bằng Shaker Sort
0 0
Trang 38//S p x p danh sách theo MaMH b ng SelectionSort ắ ế ằ
void SelectionSort( MONHOC a [], int ) n
Trang 402.10 Sắp xếp danh sách theo Tên dùng hàm Interchange Sort
a) Chương trình con
void InterchangeSort( MONHOC [], a int n ): Sắp xếp thông tin môn học theo tên.
//S p x p danh sách theo Tên b ng InterchangeSort ắ ế ằ
void InterchangeSort( MONHOC a [], int ) n
Trang 42/S p x p danh sách theo mã môn h c b ng BubbleSort ắ ế ọ ằ
void BubbleSort( MONHOC [], a int n )
{
for ( int i = 0; i < - 1; i++) n
Hình 2 9 Sắp xếp tên môn học bằng Interchange Sort
0 0
Trang 43for ( int j = -1; j > i; j ) n
if ( [j].MaMH < [j - 1].MaMH) a a hoanvi( [j], [j - 1]); a a }
b) Kiểm tra (hàm Main kiểm tra ctc)
Trang 44BubbleSort(dsmh, spt);
cout << "\n Danh sach da duoc sap xep";
cout << "\n" ; xuat_mang(dsmh, spt);
//S p x p danh sách theo ĐTB b ng InsertionSort ắ ế ằ
void InsertionSort( MONHOC a [], int ) n
Hình 2 10 Sắp xếp mã môn học bằng Bubble Sort
0 0
Trang 46while ((pos >= 0) && [pos].TenMH > x.TenMH) a {
<==========";
InsertionSort(dsmh, spt);
cout << "\n Danh sach da duoc sap xep";
0 0