Professional Documents
Culture Documents
BTDo An Giua Ki CTDLGT
BTDo An Giua Ki CTDLGT
BỘ TÀI CHÍNH
MSSV: 2221004251
Lớp: 22DHT01
1
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
DANH MỤC BẢNG
Bảng 1. 1Bảng dữ liệu thông tin các lớp mầm non..................................................................................3
MỤC LỤC
CHƯƠNG 1.................................................................................................GIỚI THIỆU
4
1. Giới thiệu chủ đề:..................................................................................................4
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)..............................................................................................................4
a) Thông tin sinh viên cần quản lí:........................................................................4
b) Cấu trúc dữ liệu hỗ trợ quản lí thông tin lớp học :.............................................4
c) Định nghĩa cấu trúc sinh viên :..........................................................................4
3. Dữ liệu mẫu:..........................................................................................................5
4. Các chức năng: (liệt kê các chức năng sẽ xây dựng)............................................5
2
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
CHƯƠNG 2.........................CHỨC NĂNG TRÊN DANH SÁCH SỬ DỤNG ARRAY
6
1. Chức năng trên mảng cấu trúc :............................................................................6
a) Chương trình con nhập:.....................................................................................6
b) Chương trình xuất:.............................................................................................6
c) Chương trình con tìm kiếm bằng LinearSearch:................................................7
d) Chương trình con tìm kiếm bằng BinarySearch:...............................................8
e) Chương trình con hoán vị (swap):.....................................................................8
f) Chương trình con sắp xếp bằng ShakerSort:.....................................................9
g) Chương trình con sắp xếp bằng SelectionSort:..................................................9
h) Chương trình con sắp xếp bằng InterchangeSort:............................................10
i) Chương trình con sắp xếp bằng BubbleSort:...................................................10
j) Chương trình con sắp xếp bằng InsertionSort:................................................10
k) Chương trình con sắp xếp bằng QuickSort:.................................................10
l) Chương trình con sắp xếp bằng MergeSort:.................................................11
m) Kiểm tra: (hàm main kiểm tra chương trình con).........................................12
2. Kết quả chạy:.......................................................................................................14
CHƯƠNG 3...............CHỨC NĂNG TRÊN DANH SÁCH LIÊN KẾT LINKED LIST
20
1. Chức năng trên danh sách liên kết......................................................................20
a) Chương trình con khởi tạo danh sách liên kết:................................................20
b) Chương trình con nhập danh sách liên kết:.....................................................20
c) Chương trình con xuất danh sách liên kết:......................................................21
d) Chương trình con tìm kiếm LinearSearch:......................................................21
e) Chương trình con hoán vị (swap):...................................................................22
f) Chương trình con sắp xếp bằng InsertSort:.....................................................22
g) Chương trình con sắp xếp bằng SelectionSort:................................................23
h) Chương trình con sắp xếp bằng InterchangeSort:............................................23
i) Chương trình con sắp xếp bằng BubbleSort:...................................................24
j) Kiểm tra: (hàm main kiểm tra chương trình con)............................................24
2. Kết quả chạy:.......................................................................................................26
CHƯƠNG 4...................................................................................................KẾT LUẬN
29
1. Các chức năng đã thực hiện:...............................................................................29
a) Các chức năng đã thực hiện trong mảng cấu trúc Array:................................29
3
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
b) Các chức năng đã thực hiện trong mảng cấu trúc Array:................................29
2. Các chức năng chưa thực hiện (không có)..........................................................30
4
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
Định nghĩa cấu trúc sinh viên trong danh sách liên kết:
typedef struct lmn
{
char MaLop[10];
char GVCN[20];
int SiSo;
int Tuoi;
float Trai;
float Trai_Gai;
} lmnType;
5
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
3. Dữ liệu mẫu:
Bảng 1. 1Bảng dữ liệu thông tin các lớp mầm non
Mã lớp 01 02 03 04 05
GVCN Trần Thị A Hoàng Ngọc B Nguyễn Thảo C Lê Thanh D Hồ Quỳnh E
Sĩ số 10 12 14 10 12
Tuổi 5 4 3 3 4
Số bé 4 6 10 6 6
trai
Tỷ lệ 4/(10-4) 6/(12-6) 10/(14-10) 6/(10-6) 6/(12-6)
bé trai/
bé gái
6
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
CHƯƠNG 2. CHỨC NĂNG TRÊN DANH SÁCH SỬ DỤNG
ARRAY
1. Chức năng trên mảng cấu trúc :
a) Chương trình con nhập:
Để nhập danh sách các lớp mầm non, cần xây dựng 2 chương trình con gồm:
- void Nhap_o (LopMamNon& a): hỗ trợ nhập 1 lớp mầm non gồm các thông
tin Mã lớp, Giáo viên chủ nhiệm, Sĩ số, Tuổi, Số bé trai, Tỷ lệ trai_gái.
- void Nhap_mang (LopMamNon a[], int n): hỗ trợ nhập danh sách các lớp
mầm non.
//ctrinh con nhap o cau truc
void Nhap_o(LopMamNon& a)
{
cout << " Ma Lop: ";
cin.getline(a.MaLop, 10);
cout << " GVCN: ";
cin.getline(a.GVCN, 7);
cout << " Si So: ";
cin >> a.SiSo;
cout << " Tuoi: ";
cin >> a.Tuoi;
cout << " So be trai: ";
cin >> a.Trai;
cin.ignore();
}
//ctrinh con nhap mang cau truc
void NhapMang(LopMamNon a[], int n)
{
for (int i = 0; i < n; i++)
{
cout << " NHAP THONG TIN LOP MAM NON: " << i + 1 << endl;
Nhap_o(a[i]);
cout << endl;
}
}
Để thực hiện chức năng tìm kiếm lớp mầm non, cần xây dựng các chương trình
con, cụ thể là LinearSearch và BinarySearch, gồm:
- void LinearSearch (LopMamNon a[], int n, char x[3]): hỗ trợ tìm kiếm 1
phần tử trong mảng theo cách tìm kiếm tuyến tính, cụ thể là so sánh phần tử cần
tìm lần lượt với phần tử thứ 1, thứ 2,…của danh sách cho đến khi gặp được
phần tử cần tìm.
- void LinearSearch2(LopMamNon a[], int n, char x[3]): tương tự như
LinearSearch nhưng được cải tiến có dùng “phần tử lính canh”.
- void BinarySearch (LopMamNon a[], int n, char x[]): hỗ trợ tìm kiếm 1
phần tử trong mảng sắp xếp theo thứ tự tăng bằng cách tìm kiếm nhị phân, cụ
thể là so sánh phần tử cần tìm với phần tử ở giữa của mảng (mảng được chia
mảng ra làm 2 phần bên trái và bên phải phần tử đó). Nếu chúng không bằng
nhau, một nửa không chứa mục tiêu sẽ bị bỏ đi. Và việc tìm kiếm tiếp tục ở nửa
còn lại, một lần nữa lấy phần tử ở giữa được chọn để so sánh với phần tử cần
tìm và lặp lại điều này cho đến khi tìm thấy.
//tìm kiem tuyen tinh
int LinearSearch(LopMamNon a[], int n, char x[3])
{
for (int i = 0; i < n; i++)
{
if (strcmp(a[i].MaLop, x) == 0)
return i;
return -1;
}
}
//tim kiem tuyen tinh cach 2
int LinearSearch2(LopMamNon a[], int n, char x[3])
{
int i = 0;
strcpy_s(a[n].MaLop, x);
while (strcmp(a[i].MaLop, x) != 0)
i++;
if (i < n)
return i;
return -1;
}
//tim kiem nhi phan
int BinarySearch(LopMamNon a[], int n, char x[])
{
int left = 0;
int right = n - 1;
int mid = (left + right) / 2;
while (left <= right && strcmp(a[mid].MaLop, x) != 0)
{
if (strcmp(a[mid].MaLop, x) > 0)
right = mid - 1;
else left = mid + 1;
8
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
mid = (left + right) / 2; }
if (left > right)
return -1;
return(mid);
}
- void BinarySearch (LopMamNon a[], int n, char x[]): hỗ trợ tìm kiếm 1
phần tử trong mảng sắp xếp theo thứ tự tăng bằng cách tìm kiếm nhị phân, cụ
thể là so sánh phần tử cần tìm với phần tử ở giữa của mảng (mảng được chia
mảng ra làm 2 phần bên trái và bên phải phần tử đó). Nếu chúng không bằng
nhau, một nửa không chứa mục tiêu sẽ bị bỏ đi. Và việc tìm kiếm tiếp tục ở nửa
còn lại, một lần nữa lấy phần tử ở giữa được chọn để so sánh với phần tử cần
tìm và lặp lại điều này cho đến khi tìm thấy.
//tìm kiem tuyen tinh
int LinearSearch(LopMamNon a[], int n, char x[3])
{
for (int i = 0; i < n; i++)
{
if (strcmp(a[i].MaLop, x) == 0)
return i;
return -1;
}
}
//tim kiem tuyen tinh cach 2
int LinearSearch2(LopMamNon a[], int n, char x[3])
{
int i = 0;
strcpy_s(a[n].MaLop, x);
while (strcmp(a[i].MaLop, x) != 0)
i++;
if (i < n)
return i;
return -1;
}
//tim kiem nhi phan
int BinarySearch(LopMamNon a[], int n, char x[])
{
int left = 0;
int right = n - 1;
int mid = (left + right) / 2;
while (left <= right && strcmp(a[mid].MaLop, x) != 0)
{
if (strcmp(a[mid].MaLop, x) > 0)
right = mid - 1;
else left = mid + 1;
mid = (left + right) / 2; }
if (left > right)
return -1;
return(mid);
}
Để thực hiện thao tác hoán vị hỗ trợ cho các chương trình con sắp xếp, cần xây
dựng bổ sung thêm chương trình con hoán vị:
- void swap (LopMamNon &a, LopMamNon &b): đổi vị trí giữa 2 biến a và b.
void swap(LopMamNon& a, LopMamNon& b)
9
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
{
LopMamNon c;
c = a;
a = b;
b = c;
}
Để thực hiện chức năng sắp xếp lớp mầm non, cần xây dựng các chương trình
con, cụ thể là thuật toán sắp xếp ShakerSort, SelectionSort, InterchangeSort,
BubbleSort, InsertionSort và thuật toán sắp xếp hiệu quả cao QuickSort,
MergeSort, gồm:
- void ShakerSort (LopMamNon a[], int n): sắp xếp danh sách lớp mầm non
theo mã lớp bằng cách đưa phần tử nhỏ/lớn nhất lên đầu dãy, sau đó lại đưa
phần tử lớn/nhỏ nhất về cuối dãy cho đến khi sắp xếp xong.
//ctrinh con Shaker Sort
void ShakerSort(LopMamNon a[], int n)
{
int left = 0;
int right = n - 1;
int k = n - 1;
while (left < right)
{
for (int i = right; i > left; i--)
if (strcmp(a[i - 1].MaLop, a[i].MaLop) > 0)
{
swap(a[i - 1], a[i]);
k = i;
}
left = k;
for (int j = left; j < right; j++)
if (strcmp(a[j].MaLop, a[j + 1].MaLop) > 0)
{
swap(a[j], a[j + 1]);
k = j;
}
right = k;
}
}
g) Chương trình con sắp xếp bằng SelectionSort:
- void SelectionSort (LopMamNon a[], int n): sắp xếp danh sách lớp mầm non
bằng cách đi tìm phần tử có giá trị nhỏ nhất trong đoạn đoạn chưa được sắp xếp
và đổi cho phần tử nhỏ nhất đó với phần tử ở đầu đoạn chưa được sắp xếp
(không phải đầu mảng) cho đến khi sắp xếp xong.
//ctrinh con Selection Sort
void SelectionSort(LopMamNon a[], int n)
{
int min;
for (int i = 0; i < n - 1; i++)
{
min = i;
for (int j = i + 1; j < n; j++)
if (strcmp(a[j].MaLop, a[min].MaLop) < 0)
min = j;
swap(a[i], a[min]);
}
10
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
}
h) Chương trình con sắp xếp bằng InterchangeSort:
- void InterchangeSort (LopMamNon a[], int n): sắp xếp danh sách lớp mầm
non bằng cách đổi chỗ liên tục phần tử ở đầu đoạn chưa được sắp xếp(không
phải đầu mảng) với phần tử nhỏ hơn nó cho tới khi duyệt tới cuối mảng, thực
hiện lặp cho tới khi mảng hoàn toàn được sắp xếp.
//ctrinh con Interchange Sort
void InterchangeSort(LopMamNon a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (strcmp(a[i].MaLop, a[j].MaLop) > 0)
swap(a[i], a[j]);
}
i) Chương trình con sắp xếp bằng BubbleSort:
- void BubbleSort (LopMamNon a[], int n): sắp xếp dãy số bằng cách lặp lại
công việc đổi chỗ 2 số liên tiếp nhau nếu chúng đứng sai thứ tự(số sau bé hơn
số trước với trường hợp sắp xếp tăng dần) cho đến khi dãy số được sắp xếp.
//ctrinh con Bubble Sort
void BubbleSort(LopMamNon a[], int n)
{
for (int i = 0; i < n - 1; i++)
for (int j = n - 1; j > 1; j--)
if (strcmp(a[j].MaLop, a[j - 1].MaLop) < 0)
swap(a[j], a[j - 1]);
}
j) Chương trình con sắp xếp bằng InsertionSort:
- void InsertionSort (LopMamNon a[], int n): lần lượt chọn giá trị của các
phần tử trong mảng (từ giá trị thứ 2 đến giá trị cuối cùng) và so sánh với với các
giá trị phía trước vị trí của nó.Nếu tìm được vị trí phù hợp, phần tử ấy sẽ được
chèn vào vị trí thích hợp giữa các giá trị trước nhưng vẫn đảm bảo mảng được
sắp xếp theo thứ tự.
//ctrinh con Insertion Sort
void InsertionSort(LopMamNon a[], int n)
{
int vt;
LopMamNon x;
for (int i = 1; i < n; i++)
{
x = a[i];
vt = i - 1;
while ((vt >= 0) && (strcmp(a[vt].MaLop, x.MaLop) > 0))
{
a[vt + 1] = a[vt];
vt--;
}
a[vt + 1] = x; }
}
11
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
k) Chương trình con sắp xếp bằng QuickSort:
- void QuickSort (LopMamNon a[], int n): sắp xếp bằng cách chia mảng danh
sách thành 3 mảng con, chọn tùy ý một phần tử làm mốc, sau đó phát hiện và
hoán vị cặp phần tử nằm sai vị trí. Tiếp tục lặp lại cho tới khi mảng được sắp
xếp xong.
//ctrinh con Quick Sort
void QuickSort(LopMamNon a[], int left, int right)
{
int i = left, j = right;
LopMamNon x = a[(left + right) / 2];
do
{
while (strcmp(a[i].MaLop, x.MaLop) < 0) i++;
while (strcmp(a[j].MaLop, x.MaLop) > 0) j--;
if (i <= j)
{
swap(a[i], a[j]);
i++;
j--;
}
} while (i < j);
if (left < j) QuickSort(a, left, j);
if (i < right) QuickSort(a, i, right);
}
- void Mergesort (LopMamNon a[], int n): Thuật toán này chia mảng danh
sách thành 2 nửa. Tiếp tục lặp lại việc này ở các nửa mảng đã chia. Sau cùng
gộp các nửa đó thành mảng đã sắp xếp. Thuật toán này cần có thêm hai hàm
khác hỗ trợ, gồm:
+ void Distribute (LopMamNon a[], int n, int &nb, int &nc, int k): Phân
phối đều luân phiên các dãy con độ dài k từ mảng a vào hai mảng con b và c.
+ void Merge (LopMamNon a[], int nc, int nb, int k): Trộn mảng b và mảng
c vào mảng a
//distribute hỗ trợ mergesort
void Distribute(LopMamNon a[], int n, int& nb, int& nc, int k)
{
int i, pa, pb, pc;
pa = pb = pc = 0;
while (pa < n)
{
for (i = 0; (pa < n) && (i < k); i++, pa++, pb++)
b[pb] = a[pa];
for (i = 0; (pa < n) && (i < k); i++, pa++, pc++)
c[pc] = a[pa];
}
nb = pb;
nc = pc;
}
//merge hỗ trợ mergesort
void Merge(LopMamNon a[], int nb, int nc, int k)
{
int p, pb, pc, ib, ic, kb, kc;
p = pb = pc = 0; ib = ic = 0;
while ((nb > 0) && (nc > 0))
12
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
{
kb = min(k, nb);
kc = min(k, nc);
if (strcmp(b[pb + ib].MaLop, c[pc + ic].MaLop) <= 0)
{
a[p++] = b[pb + ib];
ib++;
if (ib == kb)
{
for (; ic < kc; ic++)
a[p++] = c[pc + ic];
pb += kb;
pc += kc;
ib = ic = 0;
nb -= kb;
nc -= kc;
}
}
else
{
a[p++] = c[pc + ic];
ic++;
if (ic == kc)
{
for (; ib < kb; ib++)
a[p++] = b[pb + ib];
pb += kb;
pc += kc;
ib = ic = 0;
nb -= kb;
nc -= kc;
}
}
}
}
//ctrinh con mergesort
void MergeSort(LopMamNon a[], int n)
{
int k, nc = 0, nb = 0;
for (k = 1; k < n; k *= 2)
{
Distribute(a, n, nb, nc, k);
Merge(a, nb, nc, k);
}
return 0;
}
14
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
2. Kết quả chạy:
15
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
Hình 2. 3 Kết quả test chương trình con tìm kiếm (tìm thấy phần tử đầu mảng)
Hình 2. 4 Kết quả test chương trình con tìm kiếm (tìm thấy phần tử giữa mảng)
Hình 2. 5 Kết quả test chương trình con tìm kiếm (tìm thấy phần tử cuối mảng)
Hình 2. 6 Kết quả test chương trình con tìm kiếm (không tìm thấy)
Các hàm tìm kiếm LinearSearch, LinearSearch2 và BinarySearch khi test cho ra
kết quả như nhau.
16
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
17
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
18
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
19
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
20
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
Để thực hiện chức năng tìm kiếm lớp mầm non, cần xây dựng chương trình con
LinearSearch:
22
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
- lmnNodeType* LinearSearch(lmnLList* l, char ma[]): hỗ trợ tìm kiếm 1
phần tử trong mảng theo cách tìm kiếm tuyến tính, cụ thể là so sánh phần tử cần
tìm lần lượt với phần tử thứ 1, thứ 2,…của danh sách cho đến khi gặp được
phần tử cần tìm.
//tim kiem 1 lop mam non
lmnNodeType* LinearSearch(lmnLList* l, char ma[])
{
lmnNodeType* p;
p = l->head;
while (p != NULL && strcmp(p->tt.MaLop, ma) != 0)
p = p->next;
return p;
}
Để thực hiện thao tác hoán vị hỗ trợ cho các chương trình con sắp xếp, cần xây
dựng bổ sung thêm chương trình con hoán vị:
- void swap(lmnNodeType& a, lmnNodeType& b): đổi vị trí giữa 2 phần tử a
và b.
void swap(lmnNodeType& a, lmnNodeType& b)
{
lmnNodeType t = a;
a = b;
b = t;
}
Để thực hiện chức năng sắp xếp lớp mầm non, cần xây dựng các chương trình
con, cụ thể là thuật toán sắp xếp SelectionSort, InterchangeSort, BubbleSort và
InsertionSort, gồm:
f) Chương trình con sắp xếp bằng InsertSort:
//kiem tra danh sach rong hoac phai chen ngay tu dau
if (p == NULL || strcmp(p->tt.MaLop, n->tt.MaLop) > 0)
addfirst(l, n);
else
{
//do vi tri chen
while (p->next != NULL && strcmp(p->next->tt.MaLop, n->tt.MaLop) < 0)
p = p->next;
//chen
n->next = p->next;
p->next = n;
}
}
23
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
- void InsertionSort(lmnLList* l): lần lượt chọn giá trị của các phần tử trong
mảng (từ giá trị thứ 2 đến giá trị cuối cùng) và so sánh với với các giá trị phía
trước vị trí của nó.Nếu tìm được vị trí phù hợp, phần tử ấy sẽ được chèn vào vị
trí thích hợp giữa các giá trị trước nhưng vẫn đảm bảo mảng được sắp xếp theo
thứ tự.
void InsertionSort(lmnLList* l)
{
lmnLList* res;
res = new lmnLList;
Init_dslmn_LList(res);
lmnNodeType* p, * q;
p = l->head;
while (p != NULL)
{
//tro q giu phan DSLK sau truoc khi dua phan tu vao dau res
q = p->next;
p->next = NULL;
Insert_Sorted(res, p);
p = q;
}
l->head = res->head;
l->tail = res->tail;
}
g) Chương trình con sắp xếp bằng SelectionSort:
- void SelectionSort(lmnLList* l): sắp xếp danh sách lớp mầm non bằng cách
đi tìm phần tử có giá trị nhỏ nhất trong đoạn đoạn chưa được sắp xếp và đổi cho
phần tử nhỏ nhất đó với phần tử ở đầu đoạn chưa được sắp xếp (không phải đầu
mảng) cho đến khi sắp xếp xong.
void SelectionSort(lmnLList* l)
{
lmnNodeType* p, * q, * min;
//con tro p dung duyet qua danh sach lien ket
//con tro q dung phoi hop tim min
for (p = l->head; p != l->tail; p = p->next)
{
//tim min
min = p;
for (q = p->next; q != NULL; q = q->next)
if (strcmp(q->tt.MaLop, min->tt.MaLop) < 0)
min = q;
//hoan vi de du min ve dung vi tri
swap(min->tt, p->tt);
}
}
h) Chương trình con sắp xếp bằng InterchangeSort:
- void InterchangeSort(lmnLList* l): sắp xếp danh sách lớp mầm non bằng
cách đổi chỗ liên tục phần tử ở đầu đoạn chưa được sắp xếp(không phải đầu
mảng) với phần tử nhỏ hơn nó cho tới khi duyệt tới cuối mảng, thực hiện lặp
cho tới khi mảng hoàn toàn được sắp xếp.
void InterchangeSort(lmnLList* l)
{
lmnNodeType* p, * q;
for (p = l->head; p != l->tail; p = p->next)
24
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
for (q = p->next; q != NULL; q = q->next)
if (strcmp(p->tt.MaLop, q->tt.MaLop) > 0)
swap(p->tt, q->tt);
- void BubbleSort (LopMamNon a[], int n): sắp xếp dãy số bằng cách lặp lại
công việc đổi chỗ 2 số liên tiếp nhau nếu chúng đứng sai thứ tự(số sau bé hơn
số trước với trường hợp sắp xếp tăng dần) cho đến khi dãy số được sắp xếp.
void BubbleSort(lmnLList* l)
{
lmnNodeType* p, * q;
for (p = l->head; p != l->tail; p = p->next)
{
for (q = l->head; q != l->tail;q = q->next)
if (strcmp(q->tt.MaLop, q->next->tt.MaLop) > 0)
{
swap(q->tt.MaLop, q->next->tt.MaLop);
}
}
}
j) Kiểm tra: (hàm main kiểm tra chương trình con)
int main()
{
//tao danh sach
lmnLList* ds;
ds = new lmnLList;
Init_dslmn_LList(ds);
char MaLop[5];
lmnType x;
lmnNodeType* p;
char t = 'c';
//tao vong lap nhap tt lop mam non, ket thuc khi nhap xong
while (t == 'c' || t == 'C')
{
//nhap tt
lmnType lmn;
cout << "Nhap thong tin lop mam non:" << endl;
nhaplmn(lmn);
//tao node
lmnNodeType* n;
n = new lmnNodeType;
n = get_lmnNode(lmn);
25
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
system("pause");
//tim kiem
cout << "Nhap ma lop can tim: " << endl;
cin.getline(MaLop, 5);
lmnNodeType* res = LinearSearch(ds, MaLop);
cout << "\nKet qua tim kiem: " << endl;
if (res == NULL)
cout << "Khong tim thay lop nay!!!" << endl;
else
print_lmnNode(res);
cout << endl;
system("pause");
//sap xep DSLK theo thu tu bang InsertionSort
cout << "Sap xep theo InsertionSort" << endl;
system("pause");
return 0;
}
26
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
2. Kết quả chạy:
Hình 3. 1 Kết quả thử chức năng nhập danh sách liên kết
Hình 3. 2 Kết quả thử chức năng xuất danh sách liên kết
Hình 3. 3 Kết quả test chương trình con tìm kiếm (tìm thấy phần tử đầu mảng)
27
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
Hình 3. 4 Kết quả test chương trình con tìm kiếm (tìm thấy phần tử giữa mảng)
Hình 3. 5 Kết quả test chương trình con tìm kiếm (tìm thấy phần tử cuối mảng)
Hình 3. 6 Kết quả test chương trình con tìm kiếm (không tìm thấy)
28
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
29
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
31
Báo cáo CTDL> _Nguyễn Ngọc Quỳnh Như
32