Cầu trúc dữ liệu và giải thuật là một môn học nền tảng trong chương trình huấn luyện trang bị cho sinh viên những tri thức cơ bản về cấu trúc, đữ liệu khi thiết kê và thiết lập các softw
Trang 1- BỘ GIÁO DỤC VÀ ĐÀO TẠO ~ TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á
(bìa 1, bia đóng giấy màu)
BÀI TẬP LỚN HOC PHAN: CAU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
TÊN BÀI TẬP LỚN: QUẢN LÝ SINH VIÊN
Sinh viên thực hiện 0 Ũ Mã sinh viên
Bac Ninh, thang 1 nam 2022
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO „
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á
(trang phụ bia số 2, bìa mềm)
BÀI TẬP LỚN HOC PHAN: CAU TRUC DU LIEU VA GIẢI THUẬT
Nhom: 12
TEN (BAI TAP LON): QUAN LY SINH VIEN
Sinh viên thực 0 0 Mã sinh Diem
viên bằng hiện
SỐ
Hào
Phạm Trọng 20201022
CÁN BỘ CHÁM 1 CÁN BỘ CHÁM 2
(Ky và ghi rõ họ tên) (Ký và ghi rõ họ tên)
Bac Ninh, thang 1 Nam 2022
Trang 3
MUC LUC (Trinh bay trong trang riéng)
CHUONG I: TONG QUAN VE CAU TRUC DU LIEU VA GIAI THUAT
1.1.MỤC DICH VA NOI DUNG CUA CTDL.wccccccccccccccscessecestettesesteseeees
1.1.1.Mục dichio ccc icccccccccccscccesecetssnessssnssesenesnnssestsesnnesners
1.2.Các khái niệm cơ bán về CTDL và giải thuật 52-22222222
1.2.1.Giải thuật (Algorithm)) c1: 911 SH 1011010111110 112tr
1.2.2.Cấu trúc đữ liệu (data strueture) - 2 s2 E2221222222222 xe
1.2.3.Cầu trúc lưu trữ (storage strucfUre) -s sss c2 re
1.2.4.Ngôn ngữ diễn đạt giải thuật - St 222 re
1.2.5.Xác định độ phức tạp của giải thuật ác c2
CHƯƠNG II: CÀI ĐẶT CHƯƠNG TRÌNH 52 2S 2222211125122 ssee
2.1.GIỚI THIỆU ĐÈ TÀI 2S 2125121121211 211112E151 2n nrreee
D.2.CAU TRUC —
2.2.2.Các chức năng c1 1 1111111111110 1111111 HH HH0 111g
2.3.Chương trình eon i- : : 2.1111 11111 1111 111111111 0110111 11 01111111 tk
2.3.1.Cầu trúc sinh viên -:- 22t 21111112221 1102111110 reg
2.3.2.Khởi tạo một node sinh viên c0 2n n net
2.3.3.Khởi tạo danh sách liên kết sSn n1 11511111121111 11112151 x6
2.3.4.Nhập danh sách sinh viễn S11 nnnn SH 911211821128 tt
2.3.5.Chèn thêm một sinh viên vào danh sách - các s22
2.3.6.Sắp xếp danh sách sinh viên theo điểm trung bình
2.3.7.Chức năng chọn thao tác ác 1111 1n HH0 121011
2.3.8.Kết luận 22 c n H22122122 1212121222222 2a
Trang 4Lời Mở Đầu
Trong ký nguyên Công Nghệ Thông Tin, câu trúc dữ liệu là nên tảng trong mọi
hoạt động của các tô chức.Cầu trúc dữ liệu được dấu hiệu dưới nhiều khía cạnh Cầu trúc
dữ liệu và giải thuật là một môn học nền tảng trong chương trình huấn luyện trang bị cho
sinh viên những tri thức cơ bản về cấu trúc, đữ liệu khi thiết kê và thiết lập các software
Trong các bước khắc phục một bài toán trên PC, giai đoạn lập trình có vai trò trọng yêu nhất.Việc ứng dụng tin học ngày càng phát triển, các yêu cầu của thực tiễn ngày càng
phong phú.Điều đó đòi hỏi phải thiết kế các giải thuật khắc phục một cách tốt nhất vẫn đề
đặt ra
Trang 5CHUONG I: TONG QUAN VE CAU TRUC DU LIEU VA GIAI THUAT
1.1.MỤC DICH VA NOI DUNG CUA CTDL
1.1.1.Mục đích
- Môn học CTDL & giải thuật dành cho các sinh viên đã có những kiến thức cơ
bản về lập trình và thành thạo ít nhất một trong số các ngôn ngữ lập trình cơ bản như Pascal, C, C++,
- Củng cô và nâng cao kiến thức cơ bản về cầu trúc dữ liệu và giải thuật của ngành khoa học máy tính
- Tăng cường khả năng phân tích, thiết kế và cài đặt các chương trình cho máy tính
- Nâng cao khả năng tư duy trừu tượng và sự khái quát khi giải quyết các bài toán thực tế
bằng máy tính
1.1.2.Nội dung
- Trình bầy các phương pháp phân tích và thiết kế một chương trình
- Giới thiệu các cầu trúc dữ liệu từ đơn giản (các cau trúc tuyến tính như : mảng, danh sách) đến phức tạp (các cầu trúc phi tuyến như: cây, đồ thị) và các thao tác cơ bản tương
ứng trên các cầu trúc dữ liệu
- Tìm hiểu các giải thuật từ cơ bản như các giải thuật sắp xếp, tìm kiếm, đến một số giải thuật nâng cao như các giải thuật đệ quy, các giải thuật trên các cấu trúc dữ liệu cây, đồ thị
1.2.Các khái niệm cơ bản về CTDL và giải thuật
1.2.1.Giải thuật (Algorithm)
a.Khái niệm
- Là một đặc tả chính xác và không nhập nhằng về một chuỗi các bước có thể được thực hiện một các tự động, đề cuối cùng ta có thé thu được các kết quả mong muốn
- Đặc ta (specification) : ban mô tả chỉ tiết và đầy đủ về một đối tượng hay một vấn đẻ b.Một số yêu cầu của giải thuật
- Đúng đắn
- Rõ ràng
Trang 6- Phải kết thúc sau một số hữu hạn bước thực hiện
- Có mô tả các đối tượng đữ liệu mà thuật toán sẽ thao tác như dữ liệu vào (nguồn), dữ
liệu ra (đích) và các dữ liệu trung gian
- Có thời gian thực hiện phải hợp ly
1.2.2.Cau tric dir liéu (data structure)
a Khai niém
- Là kiểu đữ liệu mà bên trong nó có chứa nhiều thành phần dữ liệu và các thành phần dữ liệu day được tổ chức theo một cấu trúc nào đó Nó dùng đề biểu diễn cho các thông tin có cầu trúc của bài toán Cấu trúc dữ liệu thê hiện khía cạnh logic của dữ liệu
- Còn các dữ liệu không có cau tric duoc gọi là các dữ liệu vô hướng hay các dữ liệu đơn
giản
b.Các kiểu cấu trúc dữ liệu
* C6 hai loại cầu trúc dữ liệu chính :
- Cầu trúc tuyến tính: là cấu trúc dữ liệu mà các phần tử bên trong nó luôn được bồ trí
theo một trật tự tuyến tính hay trật tự trước sau Đây là loại cầu trúc dữ liệu đơn giản nhất Ví dụ :mảng, danh sách
- Cầu trúc phi tuyến: là các CTDL mà các thành phần bên trong không còn được bồ trí
theo trật tự tuyến tính mà theo các cấu trúc khác
1.2.3.Cẫu trúc lưu trữ (storage structure)
- Cấu trúc lưu trữ của một cầu trúc dữ liệu thê hiện khía cạnh vật lý (cài đặt) của
cầu trúc dữ liệu đó
- VỀ nguyên tắc, nó là một trong số các cách tô chức lưu trữ của máy tính
- Tuy nhiên trong thực tế sử dụng, cầu trúc lưu trữ thường được hiểu là cấu trúc kiểu dữ
liệu mà một ngôn ngữ lập trình hỗ trợ, và số lượng các cầu trúc lưu trữ thường là số lượng các kiêu dữ liệu của ngôn ngữ lập trình đó
a.Các kiểu cấu trúc lưu trữ
* Cầu trúc lưu trữ trong: là CTLT nằm ở bộ nhớ trong (bộ nhớ chính) của máy tính CTLT này có đặc điểm là tương đổi đơn giản, dễ tô chức và tốc độ thao tác rất
Trang 7nhanh Tuy nhiên, CTLT này có nhược điểm là không có tính lưu tồn (persistence), và
kích thước khá hạn chế
- Cấu trúc lưu trữ trong có hai loại:
+ Cầu trúc lưu trữ tĩnh: là CTUT mà kích thước dữ liệu luôn cổ định Cấu trúc này còn được gọi là CTLUT tuần tự
© Các ngăn nhớ đứng liền kê nhau thành một dãy liên tục trong bộ nhớ
© Số lượng và kích thước mỗi ngăn là có định
© Có thê truy nhập trực tiếp vào từng ngăn nhờ chỉ số, nên tốc độ truy nhập vào các ngăn là đồng đều
+ Cầu trúc lưu trữ động: là CTLT mà kích thước dữ liệu có thể thay đổi trong khi chạy
chương trình Cầu trúc này còn được gọi là cầu trúc con trỏ hay móc nồi
© Chiếm các ngăn nhớ thường không liên tục
®©_ Số lượng và kích thước các ngăn có thê thay đối
® Việc truy nhập trực tiếp vào từng ngăn rất hạn chế, mà thường sử dụng cách truy nhập tuần tự, bắt đầu từ một phần từ đầu, rồi truy nhập lần lượt qua các con trỏ móc nối (liên kết)
* Cầu trúc lưu trữ ngoài: là CTLT nằm ở bộ nhớ ngoài (bộ nhớ phụ) CTUT ngoài
thường có cấu trúc phức tạp và tốc độ thao tác chậm hơn rất nhiều so với CTLT trong, nhưng CTLT này có tính lưu tồn và cho phép chúng ta lưu trữ các đữ liệu có kích thước rất lớn
1.2.4.Ngôn ngữ diễn đạt giải thuật
* Nguyên tắc khi sử dụng ngôn ngữ:
- Tính độc lập của giải thuật : ngôn ngữ được chọn phải làm sáng tỏ tỉnh thần của giải thuật, giúp người đọc dé dàng hiểu được logic của giải thuật
- Tính có thể cài đặt được của giải thuật : ngôn ngữ được chọn phải thể hiện được khả
năng có thê lập trình được của giải thuật, và giúp người đọc dễ dàng chuyền từ mô tả giải thuật thành chương trình
* Các ngôn ngữ diễn đạt giải thuật
- Ngôn ngữ tự nhiên
- Lưu đồ giải thuật ( sử dụng các hình vẽ)
- Ngôn ngữ lập trình
Trang 81.2.5.Xác định độ phức tạp của giải thuật
a.Khái niệm
- Quy kết quả tính toán thời gian thực hiện một giải thuật A nào đó về một hàm có
dạng TA(n), với n đại điện cho kích thước dữ liệu vào của giải thuật A (nếu không có gì
nhằm lẫn giải thuật thì ta kí hiệu ngắn gọn là T(n))
b.Các trường hợp tính T(n):
e Th tot nhat Ttn(n)
e 1⁄h xâu nhat Txn(n)
e 1/h trung binh Ttb(n)
CHUONG II: CAI DAT CHUONG TRINH
2.1.GIỚI THIỆU ĐÈ TÀI
- Xây dựng chức năng menu dùng chọn thao tác để quản lý một danh sách sinh viên có các thông tin sau: Mã sinh viên (MaSV), Họ đệm (HoDem), Tên (Ten), Điểm trung bình (DiemTB), Mã lớp (MaLop) Và các chức nặng như: Nhập danh sách sinh viên (Nếu nhập mã số >= 0 thì dừng nhập), chèn thêm sinh viên vào danh sách, sắp xếp danh sách sinh viên theo điểm trung bình giảm dần
2.2.CÂU TRÚC
2.2.1.Cau 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/cầu trúc quản lý sinh viên gồm
-FMaSV: Mã sinh viên, gồm chuỗi kí tự số có chiều dai 10 ki tu
+HoDem: Ho dém, gom chuỗi kí tự chữ có chiều dài 20 kí tự
+Ten: Tén, gom chudi ki tu chit co chiéu dai 15 ki tu
+DiemTB: Điểm trung bình, gồm kí tự số thực
+MaLop: Mã lớp, gồm chuỗi kí tự chữ có chiều dài 10 kí tự
- Code :
2.2.2.Các chức năng
- Các chức năng trên mảng cầu trúc/danh sách liên kết
+ Nhập, xuất danh sách
-t Chèn thêm một sinh viên vào danh sách
Trang 9+ Sắp xếp danh sách ()
2.3.Chương trình con
2.3.1.Cầu trúc sinh viên
6 //khoti tao cau truc sinh vien
7 struct SinhVien {
8 int mssvj;
11 float diemtb;
13 * 35
14 + typedef struct SinhVien sinhvien;
2.3.2 Khởi tạo một node sinh viên
16 //Khoi tao mot node
17 struct node {
18 sinhvien *data;
19 struct node* link;
28 — };
21 typedef struct node Node;
22
51 Node *KhoiTaoNode() {
52 sinhvien® sv = new sinhvien;
53 Input_ThongTin(sv)j5
54 Node* p = new Node;
55 if (p == NULL) {
56 cout << “Cap phat bo nho that bai\n";
57 return @;
59 p->data = sv;
68 p->link = NULL;
61 return p;
62 + }
63
2.3.3.Khởi tạo danh sách liên kết
Trang 1023 //Khoi tao danh sach Lien két
24 struct list {
27 * 35
28 typedef struct list List;
29 void KhoiTaoList(List &1) {
30 1.pHead = 1.pTail = NULL;
31 }
32
2.3.4.Nhập danh sách sinh viên
- Đề nhập danh sách sinh viên, cần xây dựng các hàm sau:
+ void Input_ThongTin
33 //Ham nhap thong tin
34] void Input_ThongTin(sinhvien *sv) {
35 cout << "Nhap ma so sinh vien : \n";
36 cin >> sv->mssv;
38 cout << “Nhap ho sinh vien: \n";
40 getline(cin; sv->ho) ;
42 cout << “Nhap ten sinh vien : \n";
43 getline(cin,sv->ten);
45 cout << “Nhap diem trung binh cua sinh vien:\n";
46 cin >> sv->diemtb;
48 cout << ”“Nhap lop cua sinh vien : \n";
49 getline(cin, sv->lop);
58 — }
+ void Show
10
Trang 11
75 //Ham xuat danh sạch sinh vìien
76 void Show(List 1) {
77 for (Node* k = l.pHead; k != NULL; k = k->link) {
78 cout << “MSSV : ” << k->data->mssv<<endl;
79 cout << "Ho : ™ << k->data->ho << endl;
8e cout << "Ten " << k->data->ten << endl;
81 cout << “Diem trung binh : “ << k->data->diemtb << endl;
82 cout << “Lop : ” << k->data->lop << endl;
84 }
85 + }
86 [] void showNode(Node *k) {
88 cout << “MSSV : " << k->data->mssv << endl;
89 cout << “Ho : ™ << k->data->ho << endl;
98 cout << “Ten : " << k->data->ten << endl;
91 cout << “Diem trung binh : ” << k->data->diemtb << endl;
92 cout << “Lop : “ << k->data->lop << endl;
s3-)
94
2.3.5.Chèn thêm một sinh viên vào danh sách
- Đề chèn thêm một sinh viên vào danh sách, ta dùng hàm sau:
+ void Them VaoDauMotSinh Vien
64
65
66
67
68
69
79
71
72
73
//Ham them sinh vien
void ThemVaoDauMotSinhVien(List 81, Node *p) {
if (l.pHead == NULL) {
l.pHead = l.pTail= p;
}
else {
p->link = 1.pHead;
l.pHead = p;
2.3.6.Sắp xếp danh sách sinh viên theo điểm trung bình
- Đề sắp xếp danh sách, ta dùng hàm sau:
+void
2.3.7.Chức năng chọn thao tác
- Đề chọn chức năng , ta dùng hàm sau:
+ void menu
11
\n";
Trang 1295 //ham menu
96] void ChucNang(List 81) {
97 int n;
98 cout << “======Danh Sach Chuc Nang=========Ì\n”;
99 cout << "1 => Nhap, them 1 sinh vien moi \n";
190 cout << "2 => In danh sach sinh vien \n ";
101 cout << "@ = >Thoat chuong trinh\n";
192 [—] while (1){
183 cout << "Nhap chuc nang ban chon: ”;
104 cin >> nj
105 if (n == 1) {
106 cout << “Moi Ban nhap thong tin 1 sinh vien : \n";
108 ThemVacoDauMotSinhVien(1, p);
110 FJ if (n == 2) {
111 cout << “Danh Sach Sinh Vien : \n";
114) if (n == @) {
116 + }
118 + }
119
2.3.8.Kết luận
- Đây là một môn học khó và bài báo cáo này là kết quả của cả nhóm làm việc
- Báo cáo này chúng em còn nhiều sai sót cần phải chỉnh sửa.Chúng em mong mình có thê cải thiện tôt hơn trong thời gian tới
- Do thời gian có hạn nên chương chỉnh còn chưa ưng ý
12