Professional Documents
Culture Documents
BT - Đ ÁN - L6 - NguyenNgocHan
BT - Đ ÁN - L6 - NguyenNgocHan
Đề tài:
MSSV: 2221004168
Lớp: 22DHT02
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU.................................................................................................4
1.1 Giới thiệu đề bài....................................................................................................4
1.2 Cấu trúc.................................................................................................................4
1.3 Dữ liệu mẫu ( >= 10 đối tượng cần quản lý)..........................................................5
1.4 Các chức năng sẽ thực hiện...................................................................................5
CHƯƠNG 2: TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG CẤU TRÚC...............................7
2.1 Nhập danh sách GIAO HÀNG..............................................................................7
a) Chương trình con...................................................................................................7
b) Kết quả chạy..........................................................................................................8
2.2 Xuất danh sách giao hàng......................................................................................8
a) Chương trình con...................................................................................................8
b) Kết quả chạy..........................................................................................................9
2.3 Tìm kiếm...............................................................................................................9
2.3.1 Linear Search.....................................................................................................9
a) Chương trình con...................................................................................................9
b) Kết quả chạy..........................................................................................................9
2.3.2 Linear Search bằng lính canh...........................................................................10
a) Chương trình con.................................................................................................10
c) Kết quả chạy........................................................................................................11
2.3.3 Binary Search...................................................................................................11
a) Chương trình con.................................................................................................11
c) Kết quả chạy........................................................................................................12
2.4 Sắp xếp................................................................................................................12
2.4.1 Selection Sort...................................................................................................14
a) Chương trình con................................................................................................14
b) Kết quả chạy........................................................................................................14
2.4.2 Interchange Sort...............................................................................................15
Trang 1
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 2
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 3
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 4
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
struct giaohang {
int madh;
char nvgh[50];
int ngaygiao;
int trongluong;
int tien;
};
1.4
Trang 5
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 6
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Nhập 1 ô GIAO HÀNG: gồm mã đơn hàng, tên nhân viên giao hàng, ngày
void nhap_o(giaohang& a) {
cout << "\n\nNhap ma don hang: ";
cin >> a.madh;
cout << "\nNhap ho ten nhan vien giao hang: ";
cin.ignore();
cin.getline(a.nvgh, 50);
cout << "\nNhap ngay giao (theo dinh dang ddmmyy): ";
cin >> a.ngaygiao;
cout << "\nNhap trong luong don hang: ";
cin >> a.trongluong;
cout << "\nNhap so tien: ";
cin >> a.tien;
}
giao, trọng lượng và số tiền
Trang 7
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Xuất 1 ô
void xuat_o(giaohang a) {
cout << "\nThong tin don hang: ";
cout << "MDH: " << a.madh << ", HO&TEN_NVGH: " << a.nvgh << ",
NgayGiao: " << a.ngaygiao / 10000 << "/" << (a.ngaygiao % 10000) / 100 << "/" <<
(a.ngaygiao % 10000) % 100 << ", Trong luong: " << a.trongluong << ", So tien: " <<
a.tien << endl;
}
Trang 8
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
b)
Trang 10
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
b)
Trang 11
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
b)
Trang 12
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 13
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 14
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 15
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 16
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
2.4.3
Trang 17
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 18
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
2.4.6
Trang 19
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 20
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
2.4.8
Trang 21
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
2.4.10
Trang 22
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
b)
Trang 23
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 24
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
struct giaohang {
int madh;
char nvgh[50];
int ngaygiao;
int trongluong;
int tien;
};
3.1.2 Định nghĩa nút
Nút là một phần tử của danh sách gồm 2 phần:
- Phần thông tin data
- Phần con trỏ pNext dùng để chỉ vào nút sau và tạo liên kết đến phần tử phía sau
struct node {
giaohang data;
node* pNext;
};
Trang 25
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
struct list {
node* pHead;
node* pTail;
};
3.2 Các thao tác cơ bản trên danh sách liên kết
3.2.1 Khởi tạo DSLK
Hàm sẽ gán giá trị NULL cho con trỏ pHead và pTail của list, chỉ ra rằng danh sách liên
kết hiện đang trống và không chứa bất kỳ nút nào. Hàm này được gọi một lần ở đầu
chương trình hoặc khi danh sách liên kết cần được đặt lại thành trạng thái trống.
void Init(list& l) {
l.pHead = l.pTail = NULL;
}
void nhap_o(giaohang& a) {
cout << "\n\nNhap ma don hang: ";
cin >> a.madh;
cout << "\nNhap ho va ten nhan vien giao hang: ";
cin.ignore();
cin.getline(a.nvgh, 10);
cout << "\nNhap ngay giao: ";
cin >> a.ngaygiao;
cout << "\nNhap trong luong don hang: ";
cin >> a.trongluong;
cout << "\nNhap so tien: "; Trang 26
cin >> a.tien;
}
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Bước 2: Đóng gói phần thông tin kèm theo con trỏ để tạo Node
node* MakeNode(giaohang x) {
node* p = new node;
if (p == NULL) return NULL;
p->data = x;
p->pNext = NULL;
return p;
}
Trang 27
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
void InputList(list& l) {
int n;
giaohang x;
node* p;
cout << "\nNhap so luong don hang: ";
cin >> n;
for (int i = 1; i <= n; i++) {
cout << "\nDon hang thu " << i << ": ";
nhap_o(x);
p = MakeNode(x);
AddLast(l, p);
}
}
Trang 28
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Xuất 1-ô
void xuat_o(giaohang a) {
cout << "\nThong tin don hang: " << endl;
cout << "MADH: " << a.madh << " HO&TEN: " << a.nvgh << " NGAY: "
<<a.ngaygiao << " TRONG LUONG: " << a.trongluong << " TIEN: " << a.tien;
void OutList(list l) {
node* q = l.pHead;
cout << "\nCac phan tu trong danh sach gom: " << endl;
while (q != NULL) {
cout << "MADH: " << q->data.madh << " HO&TEN: " << q->data.nvgh
<< " NGAY: " << q->data.ngaygiao << " TRONG LUONG: " << q->data.trongluong
<< " TIEN: " << q->data.tien << endl;
q = q->pNext;
}
system("pause");
}
Trang 29
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
3.3
Trang 30
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
3.4 AutoInput
a) Chương trình con
3.5
Trang 31
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
void DelFirst(list& l) {
node* p;
if (l.pHead != NULL) {
p = l.pHead;
l.pHead = l.pHead->pNext;
delete p;
if (l.pHead == NULL)
l.pTail = NULL;
}
}
3.6.2
Trang 32
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 33
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 34
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
- Quick Sort
Trang 35
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
void SelectionSort(list& l) {
node* min;
node* q;
node* r;
if (l.pHead == NULL) return;
q = l.pHead;
while (q != NULL) {
min = q;
r = q->pNext;
while (r != NULL) {
if (r->data.madh < min->data.madh)
min = r;
r = r->pNext;
}
swap(min->data, q->data);
q = q->pNext;
}
}
3.8.2
Trang 36
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
void InterchangeSort(list& l) {
if (l.pHead == NULL) return;
node* q, * r;
q = l.pHead;
while (q != NULL) {
r = q->pNext;
if (r->data.madh < q->data.madh)
swap(r->data, q->data);
r = r->pNext;
}
q = q->pNext;
}
c)
Trang 37
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
void BubbleSort(list& l) {
if (l.pHead == NULL) return;
node* q, * r, * Tail2;
q = new node;
Tail2 = l.pTail;
while (Tail2 != l.pHead) {
r = l.pHead;
while (r != Tail2) {
q = r;
r = r->pNext;
if (q->data.madh > r->data.madh)
swap(q->data, r->data);
}
Tail2 = q;
}
}
Trang 38
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
void InsertionSort(list& l) {
if (l.pHead == NULL) return; // neu danh sach rong thi ket thuc
node* curr;
list l1;
Init(l1);
curr = l.pHead;
l.pHead = l.pHead->pNext;
curr->pNext = NULL;
AddFirst(l1, curr);
while (l.pHead != NULL) {
curr = l.pHead;
l.pHead = l.pHead->pNext;
curr->pNext = NULL;
node* q = l1.pHead;
if (curr->data.madh < q->data.madh) {
curr->pNext = q;
l1.pHead = curr;
}
else if (curr->data.madh > l1.pTail->data.madh) {
l1.pTail->pNext = curr;
l1.pTail = curr;
}
else {
while (q->pNext != NULL && q->pNext->data.madh < curr-
>data.madh) {
q = q->pNext;
}
curr->pNext = q->pNext;
q->pNext = curr;
}
}
l.pHead = l1.pHead;
l.pTail = l1.pTail;
}
Trang 39
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 40
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
void QuickSort(list& l) {
node* flag, * q;
if (l.pHead == NULL) return;
list l1, l2;
Init(l1); Init(l2);
flag = l.pHead;
l.pHead = l.pHead->pNext;
flag->pNext = NULL;
while (l.pHead != NULL) {
q = l.pHead; l.pHead = l.pHead->pNext; q->pNext = NULL;
if (q->data.madh <= flag->data.madh)
AddFirst(l1, q);
else
AddFirst(l2, q);
}
QuickSort(l1);
QuickSort(l2);
// Noi l1 vao flag -> vao l2
if (l1.pHead == NULL) {
l.pHead = flag;
}
else {
l.pHead = l1.pHead;
l1.pTail->pNext = flag;
}
flag->pNext = l2.pHead;
// xong l.pHead chi con l.ptail
if (l2.pTail != NULL)
l.pTail = l2.pTail;
else
l.pTail = flag;
}
Trang 41
Đồ án Cấu Trúc Dữ Liệu – Giải Thuật
Trang 42