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ỉ SoT
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
Trang 2
LOI CAM ON
Đầu tiên, em xin chân thành cảm ơn va 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ông nghệ thông tin và thầy Nguyễn Quốc Thanh đã dạy dỗ tận tình cho chúng em nhữ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ôi trường học tập mới , thay cô luôn quan tâm chúng em hỏi chúng em không hiểu chỗ nao thi 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 em ngà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 đữ 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 3MUC LUC
CHUONG I: GIỚI THIỆU - -2- 2 22212251225112211221112211211111111211211121211211 2 re 1
L.1 GiGi thi@U GE Dai ceccccccccccceeceeseeeeeeeeeessseesseeneeesessnneeeeeeeseeeegneed 1
1.2 Cấu trúc (khai báo/định nghĩa cấu truc) ccccceeecceesessessseeeeeeeees 1
1.4 Các chức năng trên mảng cấu trÚc c cv: 2
CHƯƠNG II: TIM KIEM VA SAP XEP TREN MANG CAU TRÚC - <2 4
2.1 Nhap danh Sach MON NOC cccccseceeecseeeeceeeeeeeeeeseeeetsaeeaeeeesseraneeees 4 A) CHUONG CHINN CONL cc eeccceeeeeeseeeeseeeeesesaesaeseeeaeneeesaeeseersnsseraneere 4
2.3 Tìm kiếm thông tin môn học theo mã môn học dùng Liner
A) CHUONG CHINN CONL cc eeccceeeeeeseeeeseeeeesesaesaeseeeaeneeesaeeseersnsseraneere 7
2.4 Tim kiém théng tin m6n hoc theo ma mén hoc dung Binary
2.5 Tìm kiếm thông tin môn học theo Tên dùng Liner Search 11
2.6 Tìm kiếm thông tin môn học theo Tên dùng Binary Search 12
Trang 4C) KOt QUA CHAY ce eeececcesccccceceeeececeeeceeeeeeeeeeeeeeeeeeeeeeeeeeeseeeeeeeeneess 14
2.8 Sắp xếp danh sách theo MaMH dùng hàm Shaker Sort 15
2.9 Sắp xếp danh sách theo MaMH dùng hàm Selection Sort 16
2.10 Sắp xếp danh sách theo Tên dùng hàm Interchange Sort 18
2.11 Sắp xếp danh sách theo Khóa học dùng hàm Bubble Sort 19
2.12_ Sắp xếp danh sách theo ĐTB dùng hàm Insertion Sort 21
2.13 Sắp xếp danh sách theo Tín chỉ dùng hàm Quick Sort 23
2.14_ Sắp xếp danh sách theo MAMH dùng hàm Merge Sort 25
CHƯƠNG III: TÌM KIÊM VÀ SẮP XÉP TRÊN DSLK 2252222222212 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
Trang 5b)_ Kiểm tra (hàm Main kiểm tra CC) con nhe 33
3.4 Đếm số phần tử có trong danh sách thông tin môn học 38
3.5 Tìm kiếm thông tin môn học theo mã môn học bằng Liner
3.6 Tìm kiếm thông tin môn học theo tên bằng Liner Search 43
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
3.9 Sắp xếp thông tin môn học theo mã môn hoc bang
lnterchang€ SOFẨ nen nền nh nh TH Thế BH Kế TT ben TK bến tà th 48
3.10 Sắp xếp thông tin môn học theo mã môn học bằng Bubble
Trang 6Kiểm tra (hàm Main kiểm tra CC) che 55
J4{-i0ei0.Near PP 56 Sắp xếp thông tin môn học theo mã môn học bằng Quick
56
Kiểm tra (hàm Main kiểm tra CC) che 58
J4{-i0ei0.Near PP 60
Trang 7DANH MUC BANG, HINH A Bang 1.1 DU QU MAU cccccceceecsceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeereeeeeeeeesaaaaas 2
Y
Hinh 2 1 K@t qua thdng tin MON NOC ccccceesteeeeeeessesseeeeeessesesesseeeeaaeeeaas 5
Hình 2 4 Tìm kiếm mã môn học bằng Binary Search ccc ch viyrses 11
Hình 2 6 Tìm kiếm tên môn học bằng Binary Search ccc ch riyrsea 14
Hình 2 10 Sắp xếp mã môn học băng Bubble Sort che 21 Hình 2 11 Sắp xếp theo tên môn học bằng Insertion SOFẨ che reo 23 Hình 2 12 Sắp xep tin chi bang Ợ gHơ7ơở7„„7Ừ7Ừýy,d 25 Hình 2 13 Sắp xếp mã môn học bằng Merge SOF ch xe 30
Hình 3 1 Kết quả nhập thông tin môn học vào DSLK ‹ccccccccc‡cc+‡‡ccs+c: 35 Hình 3 2 Kết quả xuất danh sách môn học ra mản hình :++:c++++:::: 38 Hình 3 3 Đém số lượng môn học có trong danh sách ‹cccccc‡‡‡ccxx‡+++: 40 Hình 3 4 Tìm kiếm mã môn học có tron 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 7 Sắp xếp mã môn học bằng Interchange Sort eerie 51
Hình 3 9 Sắp xếp m4 mon hoc bang Insertion Sort ccccccscccssceessssseseessssseesanees 56 Hình 3 10 Sắp xếp mã môn học bằng Quick Sort cccccccccccsssssssssessseeseeeeaeeeeess 60
Trang 8CHUONG I: GIOI THIEU
11 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ấm 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:
ký tự
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 tín môn học theo mã môn học (dùng hàm Liner Searrch)
Tìm thông tín môn học theo mã mã môn học (dùng hàm Binary Search)
Tìm thông tín môn học theo Tén m6n hoc (dung ham Liner Searrch)
Tìm thông tín môn hoc theo Tén m6n hoc (dung ham 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 đanh sách theo Mã môn hoc ding ham Selection Sort
Sắp xếp đanh sách theo Tên môn học dùng hàm Interchange Sort
Sắp xếp đanh sách theo Mã môn học dùng hàm Bubble Sort
Sap xép danh sach theo Tén mén hoc ding ham 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 ham Merge Sort
Trang 10Các chức năng trên danh sách liên kết
U
U
U
Nhập danh sách môn học
Xuất danh sách môn học
Tìm thông tín môn học theo Mã môn học dùng hàm Liner Search Tìm thông tín môn học theo Tên môn học dùng hàm Liner Search Sắp xếp đanh sách theo Mã môn hoc ding ham Selection Sort Sắp xếp đanh sách theo Tên môn học dùng hàm Interchange Sort Sắp xếp đanh sách theo Tín chỉ dùng hàm Bubbler Sort Sap xép danh sach theo Tén mén hoc ding ham Insertion Sort Sắp xếp đanh sách theo Mã mén hoc ding ham Quick Sort.
Trang 11CHUONG II: TIM KIEM VA SAP XEP TREN MANG CAU TRUC
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:
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
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();
}
//Nhap Théng tin môn học
void nhhap_Mang(MONHOC a[], int n)
Trang 120 void xuat_o(MONHOC a);: hỗ trợ xuất một thông tin môn học
gồm: mã môn học, tên môn học, số tín chỉ, giờ lý thuyết, giờ thực hành, tự
học
//Xuât ô cho thông tin môn hoc
void xuat_o(MONHOC a)
Trang 13cout << " 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ọc
void xuat_Mang(MIONHOC a[], int n)
Trang 14c) Két qua chay
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
kiém thông tin môn học theo MaMH
Trang 15/Tìm kiếm MaMH bang linersearch
int i = LinearSearch(dsmh, spt, MaMH);
„ Hình 2 3 Tìm kiếm mã môn học bằng Lier Search
2.4 Tim kiém thong tin mon hoc theo ma mén hoc dung Binary Search a) Chương trình con
Trang 16ñ int BinarySearch(MONHOC a[], int n, char x[]): Tim
kiém thông tin môn học theo MaMH
//Ham tim kiếm BinarySearch theo MAMH
int 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 (strcemp(x, a[mid].MaMH) < 0) right = mid - 1;
else left = mid + 1;
mid = (left + right) / 2;
/[Tim Kiém MaMH bang BinarySearch
int j = BinarySearch(dsmh, spt, MaMH);
if j >= 0)
Trang 17„ Hình 2.4 Tìm kiếm mã môn học bằng Binary Search
2.35 Tim kiêm thong tin mon hoc theo Tên dùng Limer Search
Chirong trinh con
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 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
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 20//Tìm kiếm bằng BinarySearch theo Tên môn học
int k = BinarySearch2(dsmh, spt, TenMH);
Trang 21a) Chương trình con
hoc theo MaMH
//Sắp xếp danh sách theo MaMH bang ShakerSort
void ShakerSort(MONHOC af], int n)
for (int i = right; i > left; i )
if (strcmp(a[i - 1].MaMH, a[i].MaMH) > 0)
{ hoanvi(a[i - 1], a[ï]);
k=i;
}
left = k;
for (int j = left; j < right; j++)
if (strcmp(a[j].MaMH, a[j + 1].MaMH) > 0)
Trang 22Hình 2 7 Sắp xếp mã môn học bằng Shaker Sort
2.9 Sắp xếp danh sách theo MaMH ding ham Selection Sort
a) Chương trình con
0 void SelectionSort(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 SelectionSort
void SelectionSort(MONHOC a[], int n)
{
int min;
Trang 23for (int i = @; i <n - 1; i++)
Trang 242.10 Sắp xếp danh sách theo Tên dùng hàm Interchange Sort
a) Chương trình con
tin m6n hoc theo tén
//Sắp xếp danh sách theo Tên bang InterchangeSort
void TnterchangeSort(MONHOC a[], int n)
InterchangeSort(dsmh, spt);
cout << "\n Danh sach da duoc sap xep";
cout << "\n";
Trang 25xuat_mang(dsmh, spt);
}
c) Két qua chay
„ „ Hình 2.9 Sắp xếp tên môn hoc bang Interchange Sort
2.11 Sắp xếp danh sách theo Khóa học dùng hàm Bubble Sort
a) Chương trình con
học theo mã môn học
/Sắp xếp danh sách theo mã môn học bằng BubbleSort
void BubbleSort(MONHOC a[], int n)
Trang 26Hình 2 10 Sắp xếp mã môn học bằng Bubble Sort
2.12 Sắp xếp danh sách theo ĐT dùng hàm Insertion Sort
a) Chương trình con
môn học theo tên
//Sắp xếp danh sách theo PTB bằng InsertionSort
void InsertionSort(MONHOC a[], int n)
Trang 27InsertionSort(dsmh, spt);
cout << "\n Danh sach da duoc sap xep";
Trang 28Hinh 2 11 Sap xép theo tén mén hoc bang Insertion Sort
2.13 Sắp xếp danh sách theo Tín chỉ dùng ham Quick Sort
a) Chương trình con
tin môn học theo tín chỉ
theo tín chỉ để xuất ra màn hình
//Sắp xếp học bổng bằng QuickSort
void QuickSort(MONHOC a[], int left, int right)
{
int i = left, j = right;
MONHOC = a[(left + right) / 2];
do
{
while (a[i].SoTC < x.SOTC) i++;
while (a[j].SoTC > x.SOTC) j ;
Trang 29if (left < j) QuickSort(a, left, j);
if (i < right) QuickSort(a, i,right);
}
// ham phụ của QuickSort
void QuickSortl(MONHOC af], int n)
Trang 302.14 Sap xép danh sach thea MAMH ding ham Merge Sort
Chirong trinh con
int k): chương trình con hỗ trợ phân phối mảng phụ giải thuật Merge Sort
trình con hỗ trợ trộn 2 mảng phụ
nang cao — Merge Sort
Trang 31// Khai bao cau tric quan li
Trang 32kc = min(k, nc); // Dung ctc min de ho tro cho ham
Trang 33/IMergeSort - Sắp xếp môn học theo mã
void MergeSort(MONHOC hd], int n)
Trang 35Nguyễn Xuân Tỉnh - 2121001038
CHUONG III: TIM KIEM VA SAP XEP TREN DSLK
3.1 Khởi tạo danh sách liên kết và các chương trình con hỗ trợ
/J Định nghĩa cấu trúc quản lí danh sách môn học typedef struct
Trang 37Nguyễn Xuân Tỉnh - 2121001038
32 Nhập thông tin môn học
a) Chương trình con
// Nhập thông tin môn học
cout << "Ten mon hoc:"; cin.getline(mh.TenMH, 10);
//Nhap sé tin chi
cout << "So tin chi:"; cin >> mh.SoTC;
//Nhap tin chi học lí thuyết
cout << "Gio li thuyet:"; cin >> mh.GioLT;
//Nhập tín chỉ học thực hành
cout << "Gio thuc hanh:"; cin >> mh.GioTH; //Nhập tín chỉ tự học
cout << "Tu hoc:"; cin >> mh.Tuhoc;
b) Kiém tra (ham Main kiém tra ctc)
Trang 38//hdéi nhập tiếp hay không
cout << "\n Nhap tiep hay khong (C/K) ?"; cin >> U;
Trang 39Nguyễn Xuân Tỉnh - 2121001038
a)
3.3 Xuất thông tin môn học
Chirong trinh con
/ Xuất danh sách liên kết
/J Xuất thông tin
Trang 41Hình 3 2 Kết quả xuất danh sách môn học ra màn hình
3.4 Đớm số phần từ có trong danh sách thông tìn môn học
a) Chuong trinh con
Trang 43Nguyễn Xuân Tỉnh - 2121001038
/hỏi nhập tiếp hay không
cout << "\n Nhap tiep hay khong (C/K) ?";
Hình 3 3 Đếm số lượng môn học có trong danh sách
3.5 Tim kiếm thong tin mon hoc theo ma mén hoc bang Liner Search a) Chương trình con
Tim kiém thông tin môn học bằng MaMH
/[Tim kiém théng tin mén hoc theo ma mén hoc
(Linearsearch)
mhnodelype* FindList_MaMH(dsmh_List* |, char M[])
{
43
Trang 45Nguyễn Xuân Tỉnh - 2121001038
/Thêm thông tin môn học vào cuối danh sách
add_last(ds, n);
//hdéi nhập tiếp hay không
cout << "\n Nhap tiep hay khong (C/K) ?"; cin >> U;
cin.ignore();
// In danh sách thông tin môn học
cout << "\t \t \t ==========> Danh sach thong tin
mon hoc <========== "<< endl: