SlideShare a Scribd company logo
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
BÀI TẬP THỰC HÀNH MÔN CẤU TRÚC D LIỆU
 Thời lượng: 60 tiết
 Môi trường cài đặt: Visual C++ 6.0/ Visual studio 2005 (console)
 Điều kiện được dư thi thực hành: Sinh viên vắng <= 2 Buổi thực hành
 Lịch trình thực hành
Buổi (5 tiết/ tuần) Nội dung thực hành
1 Các Giải thuật tìm kiếm
2 Các Giải thuật tìm kiếm
3 Các Giải thuật sắp xếp
4 Các Giải thuật sắp xếp
5 Danh sách liên kết đơn
6 Danh sách liên kết đơn
7 Danh sách liên kết đơn
8 Danh sách liên kết đơn
9 Ngăn xếp & Hàng đợi
10 Cây nhị phân tìm kiếm
11 Cây nhị phân tìm kiếm
12 Ôn tập & Thi thực hành
Phần I: Bài tập tìm kiếm và sắp xếp trên mảng 1 chiều (20 tiết)
Bài 1 (04 tiết): Viết chương trình cài đặt 2 giải thuật tìm kiếm: tuyến tính và nhị phân
(giả sử dãy số đầu vào có thứ tự tăng dần).
Hướng dẫn: Xây dựng các hàm sau:
- Tạo ngẫu nhiên mảng một chiều số nguyên có thứ tự tăng dần gồm N phần tử cho
trước: void PhatSinhMangTang(int a[], int N)
- Xem mảng phát sinh: void XuatMang(int a[], int N)
- Tìm tuyến tính: int TimTuyenTinh(int a[], int N, int X)
- Tìm nhị phân: int TimNhiPhan(int a[], int N, int X)
- Hàm chính (main()):
o Phát sinh mảng tăng a với kích thước N cho trước (không phải sắp xếp).
o Xuất mảng xem kết quả phát sinh.
o Nhập giá trị cần tìm x.
o Tìm x theo 2 phương pháp.
o In kết quả tìm: Nếu tìm thấy thì cho biết vị trí tìm thấy, ngược lại in kết quả
không tìm thấy cho từng phương pháp.
Bài 2 (01 tiết): Bổ sung Bài 1 sao cho chương trình phải xác định được số lần so sánh và
vị trí tìm thấy (nếu có) của phần tử cần tìm (giả sử dãy số đầu vào có thứ tự tăng dần).
Hướng dẫn: Thay đổi 2 hàm tìm trong Bài 1 như sau:
- Tìm tuyến tính có chèn vào giá trị so sánh để tính số lần so sánh với phần tử cần tìm:
GV: Dương Thành Phết – http://www.thayphet.net Trang 1
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
int TimTuyenTinh(int a[], int N, int X, int &ss)
- Tìm nhị phân có chèn vào giá trị ss tính số lần so sánh với phần tử cần tìm:
int TimNhiPhan(int a[], int N, int X, int &ss)
- Hàm chính (main()):
- Phát sinh mảng tăng a với kích thước N cho trước (không phải sắp xếp).
- Xuất mảng xem kết quả phát sinh.
- Nhập giá trị cần tìm x
- Tìm x theo 2 phương pháp
- In kết quả tìm: Gồm vị trí (nếu tìm thấy x) và số lần so sánh cho từng phương pháp.
Bài 3 (05 tiết): Cải tiến Bài 2 sao cho: Nếu dãy không có thứ tự thì áp dụng phương
pháp tìm tuyến tính, ngược lại dãy có thứ tự thì áp dụng phương pháp tìm nhị phân.
Hướng dẫn: Xóa hàm PhatSinhMangTang và bổ sung thêm một số hàm sau:
- Tìm nhị phân cho trường hợp dãy giảm dần (trường hợp dãy tăng dần sử dụng lại
hàm TimNhiPhan ở Bài 2): int TimNhiPhan2(int a[], int N, int X, int &ss)
- Kiểm tra xem mảng có thứ tự tăng? (trả về true: nếu tăng, ngược lại trả về false)
bool KiemTraTang(int a[], int N)
- Kiểm tra xem mảng có thứ tự giảm? (trả về true: nếu giảm, ngược lại trả về false)
bool KiemTraGiam(int a[], int N)
- Phát sinh mảng ngẫu nhiên, sao cho có thể tăng, giảm hoặc ngẫu nhiên
void PhatSinhMang(int a[], int N)
- Hàm chính (main()):
o Phát sinh mảng a với kích thước N cho trước.
o Xuất mảng xem kết quả phát sinh.
o Nhập giá trị cần tìm x
o Kiểm tra nếu mảng có thứ tự tăng thì gọi hàm TimNhiPhan Ngược lại, nếu
mảng có thứ tự giảm thì gọi hàm TimNhiPhan2
o Trường hợp còn lại thì gọi hàm TimTuyenTinh (mảng không có thứ tự)
o In kết quả như Bài 2
Bài 4 (05 tiết): Cài đặt các giải thuật sắp xếp theo các phương pháp:
1. Chọn trực tiếp - Selectionsort
2. Chèn trực tiếp - Insertsort
3. Đổi chỗ trực tiếp - Interchangesort.
4. Nổi bọt - Bubblesort.
5. Nhanh - Quicksort.
GV: Dương Thành Phết – http://www.thayphet.net Trang 2
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
Yêu cầu 1:
- Dữ liệu thử phát sinh ngẫu nhiên (Dùng hàm phát sinh của Bài 3).
- In ra kết quả chạy từng bước của từng giải thuật.
- Tính số lần so sánh và số phép gán của từng giải thuật.
Yêu cầu 2:
- Dữ liệu thử phát sinh có thứ tự tăng dần (Dùng hàm phát sinh của Bài 1).
- In ra kết quả chạy từng bước của từng giải thuật.
- Tính số lần so sánh và số phép gán của từng giải thuật.
Yêu cầu 3:
- Dữ liệu thử phát sinh có thứ tự giảm dần.
- In ra kết quả chạy từng bước của từng giải thuật.
- Tính số lần so sánh và số phép gán của từng giải thuật.
Lập bảng sau cho các trường hợp (yêu cầu 1, 2, 3) khi chạy chương trình:
Bài 5 (05 tiết): Cho mảng 1 chiều quản lý thông tin các sinh viên của 1 lớp học (tối đa 50
sinh viên). Mỗi sinh viên gồm các thông tin: MSSV, họ và tên, giới tính, địa chỉ và điểm
trung bình. Viết chương trình thực hiện các yêu cầu sau:
1. Nhập các sinh viên vào danh sách.
2. In ra danh sách sinh viên.
3. Xóa 1 sinh viên với mã số x cho trước khỏi danh sách.
4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình (Dùng
giải thuật sắp xếp chèn trực tiếp).
5. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của họ và tên (Dùng giải
thuật sắp xếp chọn trực tiếp).
Hướng dẫn:
- Khai báo cấu trúc thông tin sinh viên
struct ttsinhvien
{
char MSSV[10], hoten[30];
int gioitinh; //1: nữ, 0: nam
char diachi[50];
float dtb;
};
typedef struct ttsinhvien SINHVIEN;
GV: Dương Thành Phết – http://www.thayphet.net Trang 3
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
- Viết các hàm sau:
void Nhap1SV(SINHVIEN &sv); //Nhập thông tin 1 sinh viên
void NhapDSSV(SINHVIEN dssv[], int &n); //Nhập danh sách sinh viên
void Xuat1SV(SINHVIEN sv); //Xuất thông tin 1 sinh viên
void XuatDSSV(SINHVIEN dssv[], int n); //Xuất danh sách sinh viên
int TimSV(SINHVIEN dssv[], int n, char maso[]); //Tìm sinh viên
void XoaSV(SINHVIEN dssv[], int n, char maso[]); //Hàm xóa
void SapTheoDTB(SINHVIEN dssv[], int n); //Sắp xếp theo điểm tb
void SapTheoHoTen(SINHVIEN dssv[], int n); //Sắp xếp theo họ tên
void Hoanvi(SINHVIEN &a, SINHVIEN &b); // Hoán vị 2 sinh viên
Lưu ý: Dùng hàm stricmp() để so sánh 2 chuỗi
- Hàm chính (main()):
Nhập danh sách sinh viên.
Xuất danh sách.
Nhập mã số sinh viên (x) cần xóa.
Xóa x.
Xem kết quả sau khi xóa.
Sắp xếp theo điểm trung bình, xuất và xem kết quả.
Sắp xếp theo họ tên, xuất và xem kết quả.
Phần II: Bài tập danh sách liên kết – ngăn xếp, hàng đợi (25 tiết)
Cấu trúc tổng quát của chương trình:
Chương trình mẫu:
Nhập và xuất danh sách
liên kết đơn các số
nguyên
#include
<iotream.h>
#include
<stdlib.h>
struct tNODE
{
int Key;
struct
tNODE *pNext;
};
typedef struct
tNODE NODE;
struct tList
{
NODE
*pHead, *pTail;
GV: Dương Thành Phết – http://www.thayphet.net Trang 4
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
};
typedef struct tList LIST;
void KhoiTao(LIST &l);
void Huy(LIST &l);
NODE *TaoNode(int x);
void ThemDau(LIST &l, NODE *p);
void Nhap(LIST &l);
void Xuat(LIST l);
void main()
{
LIST l;
Nhap(l);
cout<<"nDanh sach vua nhap: ";
Xuat(l);
Huy(l);
}
void KhoiTao(LIST &l)
{
l.pHead=l.pTail=NULL;
}
void Huy(LIST &l)
{
NODE *p;
while(l.pHead)
{
p=l.pHead;
l.pHead=l.pHead->pNext;
delete p;
}
}
NODE *TaoNode(int x)
{
NODE *p;
p=new NODE;
if(p==NULL)
{
cout<<"Khong cap phat duoc vung nho, ket thuc";
exit(0);
}
p->Key=x;
p->pNext=NULL;
return p;
}
void ThemDau(LIST &l, NODE *p)
{
if(l.pHead==NULL)
l.pHead=l.pTail=p;
else
{
p->pNext=l.pHead;
l.pHead=p;
}
}
void Nhap(LIST &l)
{
int x;
NODE *p;
GV: Dương Thành Phết – http://www.thayphet.net Trang 5
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
KhoiTao(l);
Do
{
cout<<"Nhap gia tri vao danh sach (Nhap 0 ket thuc): ";
cin>>x;
if(x==0)
break;
p=TaoNode(x);
ThemDau(l,p);
}while(true);
}
void Xuat(LIST l)
{
NODE *p=l.pHead;
while(p)
{
cout<<p->Key<<” “;
p=p->pNext;
}
}
Bài 1: Cho danh sách liên kết đơn gồm các phần tử là số nguyên, viết chương trình thực
hiện các yêu cầu sau:
1. Thêm một phần tử vào đầu danh sách.
void ThemDau(LIST &l, NODE *p);
2. Xuất danh sách ra màn hình.
void Xuat(LIST l);
3. Liệt kê các phần tử mang giá trị chẵn.
void XuatChan(LIST &l)
{
NODE *p=l.pHead;
while(p)
{
Nếu p->Key chẵn in giá trị p->Key
p=p->pNext;
}
}
GV: Dương Thành Phết – http://www.thayphet.net Trang 6
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
4. Tìm phần tử có giá trị lớn nhất.
NODE *TimMax(LIST l)
{
NODE *pmax=l.pHead;
for(NODE *p=l.pHead->pNext; p; p=p->pNext)
Nếu giá trị của pmax < giá trị của p thì gán lại pmax = p;
return max;
}
5. Đếm số lượng số nguyên tố trong danh sách.
bool LaSNT(int x); //Kiểm tra x có phải là số nguyên tố
int DemSNT(LIST l);//Đếm số lượng số nguyên tố trong danh sách
6. Thêm phần tử có giá trị nguyên X vào trước phần tử có giá trị chẵn đầu tiên trong
danh sách. Nếu không có phần tử chẵn thì thêm vào đầu danh sách.
NODE *TimChanDau(LIST l);//Tìm chẵn đầu trong danh sách
void ThemkTruocp(LIST &l, NODE *p, NODE *k);//Thêm k vào trước p
void ThemXTruocChanDau(LIST &l, int X)//Thêm X vào trước chẵn đầu
{
NODE *k=TaoNode(X);//Phần tử cần thêm
NODE *p=TimChanDau(l);//Node có giá trị chẵn đầu tiên
if(p==NULL)
ThemDau(l, k);
else
ThemkTruocp(l, p, k);
}
Ví dụ cách sử dụng hàm ThemXTruocChanDau()
void main()
{
LIST l;
int x;
Nhap(l);
cout<<“Danh sach vua nhap: n”;
Xuat(l);
cout<<“nNhap gia tri can them vao truoc chan dau: “;
cin>>x;
ThemXTruocChanDau(l, x);
cout<<“nDanh sach sau khi them vao truoc chan dau:n”;
Xuat(l);
}
7. Thêm phần tử có giá trị nguyên X vào sau phần tử có giá trị lẻ cuối cùng trong
danh sách. Nếu không có phần tử lẽ thì thêm vào cuối danh sách.
NODE *TimLeCuoi(LIST l);//Tìm lẻ cuối cùng trong danh sách
void ThemCuoi(LIST &l, NODE *p);//Thêm p vào cuối danh sách
void ThemkSaup(LIST &l, NODE *p, NODE *k);//Thêm k vào sau p
void ThemXSauLeCuoi(LIST &l, int X);//Thêm X vào sau lẻ cuối
GV: Dương Thành Phết – http://www.thayphet.net Trang 7
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
8. Xóa phần tử nhỏ nhất trong danh sách (Nếu trùng chỉ xóa phần tử nhỏ nhất đầu
tiên).
NODE *TimMin(LIST l);//Tìm node có giá trị nhỏ nhất
void XoaDau(LIST &l);//Xóa node đầu của danh sách
void XoaCuoi(LIST &l);//Xóa node cuối của danh sách
void Xoap(LIST &l, NODE *p);//Xóa node p
void XoaMin(LIST &l);//Xóa phần tử nhỏ nhất trong danh sách
9. Nhập vào phần tử X, xóa phần tử đứng sau và đứng trước phần tử X trong danh
sách.
NODE *TimX(LIST l, int X);//Tìm X
void XoakTruocp(LIST &l, NODE *p, NODE *k);//Xóa k trước p
void XoakSaup(LIST &l, NODE *p, NODE *q);//Xóa k sau p
10. Tách danh sách thành 2 danh sách, sao cho:
- Danh sách thứ nhất chứa các phần tử là số nguyên tố.
- Danh sách thứ hai chứa các phần tử còn lại.
void Tach(LIST l, LIST &l1, LIST &l2)
{
KhoiTao(l1);
KhoiTao(l2);
NODE *p=l.pHead, *pAdd;
while(p)
{
int k = p->Key;
pAdd=TaoNode(k);
Nếu k là số nguyên tố thì
ThemDau(l1, pAdd);
Ngược lại
ThemDau(l2, pAdd);
p trỏ đến node kế tiếp
}
}
Bài 2: Cho 2 danh sách liên kết đơn l1 và l2 gồm các phần tử là số nguyên, viết chương
trình thực hiện các yêu cầu sau:
1. Sắp xếp l1 và l2 tăng dần.
void SapXep(LIST &l);
2. Nối l1 và l2 thành l3 sao cho l3 vẫn có thứ tự tăng dần.
void Noi(LIST l1, LIST l2, LIST &l3);
Bài 3: Cho danh sách liên kết đơn quản lý thông tin của các sinh viên của 1 lớp học (tối
đa 50 sinh viên). Mỗi sinh viên gồm các thông tin: MSSV, họ và tên, giới tính, địa chỉ và
điểm trung bình. Viết chương trình thực hiện các yêu cầu sau:
GV: Dương Thành Phết – http://www.thayphet.net Trang 8
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
1. Thêm 1 sinh viên vào danh sách.
2. In ra danh sách sinh viên.
3. Xóa 1 sinh viên với MSSV cho trước khỏi danh sách.
4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình.
5. Liệt kê các sinh viên có điểm trung bình >=5.0.
6. Đếm số lượng sinh viên nam.
7. Cập nhật điểm trung bình của một sinh viên thông qua mã số sinh viên.
Bài 4 (Bài tập làm thêm): Dùng danh sách liên kết đơn để biểu diễn 2 số lớn (số có vài
chục chữ số trở lên), viết chương trình thực hiện các yêu cầu sau:
1. Cộng
2. Trừ
3. Nhân
4. Chia
hai số trên.
Bài 5 (Bài tập làm thêm): Cài đặt lại câu 1 của phần II dùng danh sách liên kết kép.
Bài 6: Dùng kỹ thuật mảng để cài đặt minh họa các thao tác cơ bản: pop, push, … trên
ngăn xếp (hoặc hàng đợi)
Bài 7: Ứng dụng bài 6 để cài đặt chương trình cho phép nhận vào biểu thức gồm các số,
các toán tử +, -, *, /, các dấu đóng mở ngoặc và tính giá trị của biểu thức này
Ví dụ:
- Nhập biểu thức: (2*3)+9-(3+4)
- In kết quả của biểu thức: 8
Phần III: Bài tập cây nhị phân tìm kiếm (10 tiết)
Bài 1: Khai báo cấu trúc dữ liệu cây nhị phân (các node có giá trị là số nguyên) và viết
chương trình thực hiện các yêu cầu sau:
1. Nhập và duyệt cây theo các thứ tự: trước, giữa và sau.
2. Tìm node có giá trị x trên cây.
3. Tìm node có giá trị nhỏ nhất.
4. Tìm node có giá trị lớn nhất.
5. Tính độ cao của cây.
6. Đếm số nút lá của cây.
7. Đếm số nút có đúng 2 cây con.
8. Đếm số nút có đúng 1 cây con.
9. Xóa nút có giá trị x.
Bài 2 (Bài tập làm thêm):Viết chương trình tạo và tra cứu từ điển Anh – Việt đơn giản.
GV: Dương Thành Phết – http://www.thayphet.net Trang 9
Bài tập thực hành Cấu trúc dữ liệu & Giải thuật
1. Thêm 1 sinh viên vào danh sách.
2. In ra danh sách sinh viên.
3. Xóa 1 sinh viên với MSSV cho trước khỏi danh sách.
4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình.
5. Liệt kê các sinh viên có điểm trung bình >=5.0.
6. Đếm số lượng sinh viên nam.
7. Cập nhật điểm trung bình của một sinh viên thông qua mã số sinh viên.
Bài 4 (Bài tập làm thêm): Dùng danh sách liên kết đơn để biểu diễn 2 số lớn (số có vài
chục chữ số trở lên), viết chương trình thực hiện các yêu cầu sau:
1. Cộng
2. Trừ
3. Nhân
4. Chia
hai số trên.
Bài 5 (Bài tập làm thêm): Cài đặt lại câu 1 của phần II dùng danh sách liên kết kép.
Bài 6: Dùng kỹ thuật mảng để cài đặt minh họa các thao tác cơ bản: pop, push, … trên
ngăn xếp (hoặc hàng đợi)
Bài 7: Ứng dụng bài 6 để cài đặt chương trình cho phép nhận vào biểu thức gồm các số,
các toán tử +, -, *, /, các dấu đóng mở ngoặc và tính giá trị của biểu thức này
Ví dụ:
- Nhập biểu thức: (2*3)+9-(3+4)
- In kết quả của biểu thức: 8
Phần III: Bài tập cây nhị phân tìm kiếm (10 tiết)
Bài 1: Khai báo cấu trúc dữ liệu cây nhị phân (các node có giá trị là số nguyên) và viết
chương trình thực hiện các yêu cầu sau:
1. Nhập và duyệt cây theo các thứ tự: trước, giữa và sau.
2. Tìm node có giá trị x trên cây.
3. Tìm node có giá trị nhỏ nhất.
4. Tìm node có giá trị lớn nhất.
5. Tính độ cao của cây.
6. Đếm số nút lá của cây.
7. Đếm số nút có đúng 2 cây con.
8. Đếm số nút có đúng 1 cây con.
9. Xóa nút có giá trị x.
Bài 2 (Bài tập làm thêm):Viết chương trình tạo và tra cứu từ điển Anh – Việt đơn giản.
GV: Dương Thành Phết – http://www.thayphet.net Trang 9

More Related Content

What's hot

Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!
Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!
Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!
Dịch Vụ Viết Luận Văn Thuê ZALO/TELEGRAM 0934573149
 
Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520
Vũ Anh
 
Cau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xxCau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xx
Bùi Ngọc Bảo
 
VI ĐIỀU KHIỂN 8051
VI ĐIỀU KHIỂN 8051VI ĐIỀU KHIỂN 8051
VI ĐIỀU KHIỂN 8051
LE The Vinh
 
Chuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va phoChuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va phothanhyu
 
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng ViệtTài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Công ty công nghệ tự động hóa Hoàng Gia
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
https://www.facebook.com/garmentspace
 
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAYĐề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
thuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu sothuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu so
Kimkaty Hoang
 
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
nataliej4
 
Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...
Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...
Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...
Chu Quang Thảo
 
[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tính[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tính
Pham Hoang
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
Hồ Lợi
 
[BTL] Cảm biến đo độ ẩm
[BTL] Cảm biến đo độ ẩm[BTL] Cảm biến đo độ ẩm
[BTL] Cảm biến đo độ ẩm
Hoàng Phạm
 
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngBáo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Huyen Pham
 
Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02
Nhóc Nhóc
 
Luận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAY
Luận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAYLuận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAY
Luận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAY
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
xử lý hình thái học và ứng dụng
xử lý hình thái học và ứng dụngxử lý hình thái học và ứng dụng
xử lý hình thái học và ứng dụng
Pham Ngoc Long
 

What's hot (20)

1
11
1
 
Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!
Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!
Báo cáo thực tập - LẮP RÁP, CÀI ĐẶT, SỬA CHỮA MÁY TÍNH !!
 
Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520Tai lieu tra_cuu_pic 18f4520
Tai lieu tra_cuu_pic 18f4520
 
Cau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xxCau truc phan cung pic16 f8xx
Cau truc phan cung pic16 f8xx
 
VI ĐIỀU KHIỂN 8051
VI ĐIỀU KHIỂN 8051VI ĐIỀU KHIỂN 8051
VI ĐIỀU KHIỂN 8051
 
Chuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va phoChuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va pho
 
Giao tiếp TTL-CMOS
Giao tiếp TTL-CMOSGiao tiếp TTL-CMOS
Giao tiếp TTL-CMOS
 
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng ViệtTài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
Tài liệu biến tần Siemens Sinamic V20 - Hướng dẫn sử dụng bằng Tiếng Việt
 
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cảnđồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
đồ áN tốt nghiệp điều khiển và tự động hóa robot tránh vật cản
 
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAYĐề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
Đề tài: Thiết kế và thi công mô hình điều khiển thiết bị điện, HAY
 
thuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu sothuc hanh xu ly tin hieu so
thuc hanh xu ly tin hieu so
 
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
ĐỀ TÀI : ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên : PGS.TS. HUỲNH CÔNG ...
 
Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...
Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...
Robot bám đường ứng dụng thuật toán PID - Line follow robot with PID . Chu Qu...
 
[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tính[ĐAMH] Điều khiển thiết bị điện qua máy tính
[ĐAMH] Điều khiển thiết bị điện qua máy tính
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
[BTL] Cảm biến đo độ ẩm
[BTL] Cảm biến đo độ ẩm[BTL] Cảm biến đo độ ẩm
[BTL] Cảm biến đo độ ẩm
 
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thôngBáo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
Báo cáo bài tập lớn môn Cơ sở dữ liệu - Học viện công nghệ bưu chính viễn thông
 
Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02Kiến trúc máy tính và hợp ngữ bài 02
Kiến trúc máy tính và hợp ngữ bài 02
 
Luận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAY
Luận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAYLuận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAY
Luận văn: Nghiên cứu thiết kế mô hình cửa đóng mở tự động, HAY
 
xử lý hình thái học và ứng dụng
xử lý hình thái học và ứng dụngxử lý hình thái học và ứng dụng
xử lý hình thái học và ứng dụng
 

Viewers also liked

bai tap cau truc du lieu ptit
bai tap cau truc du lieu ptitbai tap cau truc du lieu ptit
bai tap cau truc du lieu ptit
Mit Rin
 
Bai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hocBai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hocHồ Lợi
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trình
Thai Hoc Vu
 
Bài tập CTDL và GT 2
Bài tập CTDL và GT 2Bài tập CTDL và GT 2
Bài tập CTDL và GT 2
Hồ Lợi
 
Chương 3 - Hàng đợi
Chương 3 - Hàng đợi Chương 3 - Hàng đợi
Chương 3 - Hàng đợi
Hồ Lợi
 
C4 data structures
C4 data structuresC4 data structures
C4 data structuresHồ Lợi
 
Ctdl 2005 chuong 4
Ctdl 2005 chuong 4Ctdl 2005 chuong 4
Ctdl 2005 chuong 4Hồ Lợi
 
C5 classes and objects
C5 classes and objectsC5 classes and objects
C5 classes and objectsHồ Lợi
 
Ctdl 2005 chuong 2
Ctdl 2005 chuong 2Ctdl 2005 chuong 2
Ctdl 2005 chuong 2Hồ Lợi
 

Viewers also liked (20)

bai tap cau truc du lieu ptit
bai tap cau truc du lieu ptitbai tap cau truc du lieu ptit
bai tap cau truc du lieu ptit
 
Bai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hocBai tap thuc hanh nhap mon tin hoc
Bai tap thuc hanh nhap mon tin hoc
 
Bài tập ôn lập trình
Bài tập ôn lập trìnhBài tập ôn lập trình
Bài tập ôn lập trình
 
Chuong2 c
Chuong2 c Chuong2 c
Chuong2 c
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Chuong5 (2)
Chuong5 (2)Chuong5 (2)
Chuong5 (2)
 
Chuong4 (2)
Chuong4 (2)Chuong4 (2)
Chuong4 (2)
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
Bài tập CTDL và GT 2
Bài tập CTDL và GT 2Bài tập CTDL và GT 2
Bài tập CTDL và GT 2
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Chương 3 - Hàng đợi
Chương 3 - Hàng đợi Chương 3 - Hàng đợi
Chương 3 - Hàng đợi
 
Bai6 stacks
Bai6 stacksBai6 stacks
Bai6 stacks
 
C4 data structures
C4 data structuresC4 data structures
C4 data structures
 
Ctdl 2005 chuong 4
Ctdl 2005 chuong 4Ctdl 2005 chuong 4
Ctdl 2005 chuong 4
 
C5 classes and objects
C5 classes and objectsC5 classes and objects
C5 classes and objects
 
Ctdl 2005 chuong 2
Ctdl 2005 chuong 2Ctdl 2005 chuong 2
Ctdl 2005 chuong 2
 
Bai1 kdl
Bai1 kdlBai1 kdl
Bai1 kdl
 
Cau 2
Cau 2Cau 2
Cau 2
 
Gtrinh oop
Gtrinh oopGtrinh oop
Gtrinh oop
 

Similar to Bài tập CTDL và GT 12

Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepNguyễn Ngọc Hà
 
02 stack queue
02 stack queue02 stack queue
02 stack queuelanheo04
 
Ctdl C09
Ctdl C09Ctdl C09
Ctdl C09giang
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxepHồ Lợi
 
Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Bài tập CTDL và GT 13
Bài tập CTDL và GT 13
Hồ Lợi
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNguest717ec2
 
Bài tập CTDL và GT 11
Bài tập CTDL và GT 11Bài tập CTDL và GT 11
Bài tập CTDL và GT 11
Hồ Lợi
 
Bai10 stack queue
Bai10 stack queueBai10 stack queue
Bai10 stack queueHồ Lợi
 
SLIDE CAU TRUC DL_GT.pptx
SLIDE CAU TRUC DL_GT.pptxSLIDE CAU TRUC DL_GT.pptx
SLIDE CAU TRUC DL_GT.pptx
TrangNguyen211415
 
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
clbinternet.info
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sởHajunior9x
 
Cac van de co so kh may tinh
Cac van de co so kh may tinhCac van de co so kh may tinh
Cac van de co so kh may tinh
TunAnh346
 
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
NguynVnTun74
 
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảngLớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
Hoàng Kỳ Anh
 

Similar to Bài tập CTDL và GT 12 (20)

Ctdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xepCtdl lab07-cac thuat-toan_sap_xep
Ctdl lab07-cac thuat-toan_sap_xep
 
02 stack queue
02 stack queue02 stack queue
02 stack queue
 
Ctdl C09
Ctdl C09Ctdl C09
Ctdl C09
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxep
 
Ctdl 1993
Ctdl   1993Ctdl   1993
Ctdl 1993
 
Bài tập CTDL và GT 13
Bài tập CTDL và GT 13Bài tập CTDL và GT 13
Bài tập CTDL và GT 13
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
 
Bài tập CTDL và GT 11
Bài tập CTDL và GT 11Bài tập CTDL và GT 11
Bài tập CTDL và GT 11
 
Bai10 stack queue
Bai10 stack queueBai10 stack queue
Bai10 stack queue
 
SLIDE CAU TRUC DL_GT.pptx
SLIDE CAU TRUC DL_GT.pptxSLIDE CAU TRUC DL_GT.pptx
SLIDE CAU TRUC DL_GT.pptx
 
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
CLB Internet - iShare: Ky nang Excel cho moi nguoi - 240615
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sở
 
Cac van de co so kh may tinh
Cac van de co so kh may tinhCac van de co so kh may tinh
Cac van de co so kh may tinh
 
Đệ quy và quay lui
Đệ quy và quay luiĐệ quy và quay lui
Đệ quy và quay lui
 
Section 2
Section 2Section 2
Section 2
 
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
 
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảngLớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
 
Thuat Toan
Thuat ToanThuat Toan
Thuat Toan
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 

More from Hồ Lợi

Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cHồ Lợi
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functionsHồ Lợi
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequyHồ Lợi
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignmentHồ Lợi
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapcHồ Lợi
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitapHồ Lợi
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhHồ Lợi
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Hồ Lợi
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++Hồ Lợi
 
Epc assignment
Epc assignmentEpc assignment
Epc assignment
Hồ Lợi
 
Epc test practical
Epc test practicalEpc test practical
Epc test practical
Hồ Lợi
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --thHồ Lợi
 

More from Hồ Lợi (20)

Xu ly chuoi
Xu ly chuoiXu ly chuoi
Xu ly chuoi
 
Tóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của cTóm tắt các hàm chuẩn của c
Tóm tắt các hàm chuẩn của c
 
T4
T4T4
T4
 
Nguyen lyoop
Nguyen lyoopNguyen lyoop
Nguyen lyoop
 
Lect04 functions
Lect04 functionsLect04 functions
Lect04 functions
 
Ky thuatkhudequy
Ky thuatkhudequyKy thuatkhudequy
Ky thuatkhudequy
 
Itt epc assignment
Itt epc assignmentItt epc assignment
Itt epc assignment
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapc
 
H hai epc_baitap
H hai epc_baitapH hai epc_baitap
H hai epc_baitap
 
Giaotrinhbaitapkythuatlaptrinh
GiaotrinhbaitapkythuatlaptrinhGiaotrinhbaitapkythuatlaptrinh
Giaotrinhbaitapkythuatlaptrinh
 
Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2Giao trinh ky thuat lap trinh 2
Giao trinh ky thuat lap trinh 2
 
Giao trinh c c++
Giao trinh c c++Giao trinh c c++
Giao trinh c c++
 
File trong c_
File trong c_File trong c_
File trong c_
 
Epc assignment
Epc assignmentEpc assignment
Epc assignment
 
Epc test practical
Epc test practicalEpc test practical
Epc test practical
 
De thic++ --th
De thic++ --thDe thic++ --th
De thic++ --th
 
Dethi c++ -lt
Dethi c++ -ltDethi c++ -lt
Dethi c++ -lt
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
D05 stl
D05 stlD05 stl
D05 stl
 
Cpl test3
Cpl test3Cpl test3
Cpl test3
 

Bài tập CTDL và GT 12

  • 1. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật BÀI TẬP THỰC HÀNH MÔN CẤU TRÚC D LIỆU  Thời lượng: 60 tiết  Môi trường cài đặt: Visual C++ 6.0/ Visual studio 2005 (console)  Điều kiện được dư thi thực hành: Sinh viên vắng <= 2 Buổi thực hành  Lịch trình thực hành Buổi (5 tiết/ tuần) Nội dung thực hành 1 Các Giải thuật tìm kiếm 2 Các Giải thuật tìm kiếm 3 Các Giải thuật sắp xếp 4 Các Giải thuật sắp xếp 5 Danh sách liên kết đơn 6 Danh sách liên kết đơn 7 Danh sách liên kết đơn 8 Danh sách liên kết đơn 9 Ngăn xếp & Hàng đợi 10 Cây nhị phân tìm kiếm 11 Cây nhị phân tìm kiếm 12 Ôn tập & Thi thực hành Phần I: Bài tập tìm kiếm và sắp xếp trên mảng 1 chiều (20 tiết) Bài 1 (04 tiết): Viết chương trình cài đặt 2 giải thuật tìm kiếm: tuyến tính và nhị phân (giả sử dãy số đầu vào có thứ tự tăng dần). Hướng dẫn: Xây dựng các hàm sau: - Tạo ngẫu nhiên mảng một chiều số nguyên có thứ tự tăng dần gồm N phần tử cho trước: void PhatSinhMangTang(int a[], int N) - Xem mảng phát sinh: void XuatMang(int a[], int N) - Tìm tuyến tính: int TimTuyenTinh(int a[], int N, int X) - Tìm nhị phân: int TimNhiPhan(int a[], int N, int X) - Hàm chính (main()): o Phát sinh mảng tăng a với kích thước N cho trước (không phải sắp xếp). o Xuất mảng xem kết quả phát sinh. o Nhập giá trị cần tìm x. o Tìm x theo 2 phương pháp. o In kết quả tìm: Nếu tìm thấy thì cho biết vị trí tìm thấy, ngược lại in kết quả không tìm thấy cho từng phương pháp. Bài 2 (01 tiết): Bổ sung Bài 1 sao cho chương trình phải xác định được số lần so sánh và vị trí tìm thấy (nếu có) của phần tử cần tìm (giả sử dãy số đầu vào có thứ tự tăng dần). Hướng dẫn: Thay đổi 2 hàm tìm trong Bài 1 như sau: - Tìm tuyến tính có chèn vào giá trị so sánh để tính số lần so sánh với phần tử cần tìm: GV: Dương Thành Phết – http://www.thayphet.net Trang 1
  • 2. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật int TimTuyenTinh(int a[], int N, int X, int &ss) - Tìm nhị phân có chèn vào giá trị ss tính số lần so sánh với phần tử cần tìm: int TimNhiPhan(int a[], int N, int X, int &ss) - Hàm chính (main()): - Phát sinh mảng tăng a với kích thước N cho trước (không phải sắp xếp). - Xuất mảng xem kết quả phát sinh. - Nhập giá trị cần tìm x - Tìm x theo 2 phương pháp - In kết quả tìm: Gồm vị trí (nếu tìm thấy x) và số lần so sánh cho từng phương pháp. Bài 3 (05 tiết): Cải tiến Bài 2 sao cho: Nếu dãy không có thứ tự thì áp dụng phương pháp tìm tuyến tính, ngược lại dãy có thứ tự thì áp dụng phương pháp tìm nhị phân. Hướng dẫn: Xóa hàm PhatSinhMangTang và bổ sung thêm một số hàm sau: - Tìm nhị phân cho trường hợp dãy giảm dần (trường hợp dãy tăng dần sử dụng lại hàm TimNhiPhan ở Bài 2): int TimNhiPhan2(int a[], int N, int X, int &ss) - Kiểm tra xem mảng có thứ tự tăng? (trả về true: nếu tăng, ngược lại trả về false) bool KiemTraTang(int a[], int N) - Kiểm tra xem mảng có thứ tự giảm? (trả về true: nếu giảm, ngược lại trả về false) bool KiemTraGiam(int a[], int N) - Phát sinh mảng ngẫu nhiên, sao cho có thể tăng, giảm hoặc ngẫu nhiên void PhatSinhMang(int a[], int N) - Hàm chính (main()): o Phát sinh mảng a với kích thước N cho trước. o Xuất mảng xem kết quả phát sinh. o Nhập giá trị cần tìm x o Kiểm tra nếu mảng có thứ tự tăng thì gọi hàm TimNhiPhan Ngược lại, nếu mảng có thứ tự giảm thì gọi hàm TimNhiPhan2 o Trường hợp còn lại thì gọi hàm TimTuyenTinh (mảng không có thứ tự) o In kết quả như Bài 2 Bài 4 (05 tiết): Cài đặt các giải thuật sắp xếp theo các phương pháp: 1. Chọn trực tiếp - Selectionsort 2. Chèn trực tiếp - Insertsort 3. Đổi chỗ trực tiếp - Interchangesort. 4. Nổi bọt - Bubblesort. 5. Nhanh - Quicksort. GV: Dương Thành Phết – http://www.thayphet.net Trang 2
  • 3. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật Yêu cầu 1: - Dữ liệu thử phát sinh ngẫu nhiên (Dùng hàm phát sinh của Bài 3). - In ra kết quả chạy từng bước của từng giải thuật. - Tính số lần so sánh và số phép gán của từng giải thuật. Yêu cầu 2: - Dữ liệu thử phát sinh có thứ tự tăng dần (Dùng hàm phát sinh của Bài 1). - In ra kết quả chạy từng bước của từng giải thuật. - Tính số lần so sánh và số phép gán của từng giải thuật. Yêu cầu 3: - Dữ liệu thử phát sinh có thứ tự giảm dần. - In ra kết quả chạy từng bước của từng giải thuật. - Tính số lần so sánh và số phép gán của từng giải thuật. Lập bảng sau cho các trường hợp (yêu cầu 1, 2, 3) khi chạy chương trình: Bài 5 (05 tiết): Cho mảng 1 chiều quản lý thông tin các sinh viên của 1 lớp học (tối đa 50 sinh viên). Mỗi sinh viên gồm các thông tin: MSSV, họ và tên, giới tính, địa chỉ và điểm trung bình. Viết chương trình thực hiện các yêu cầu sau: 1. Nhập các sinh viên vào danh sách. 2. In ra danh sách sinh viên. 3. Xóa 1 sinh viên với mã số x cho trước khỏi danh sách. 4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình (Dùng giải thuật sắp xếp chèn trực tiếp). 5. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của họ và tên (Dùng giải thuật sắp xếp chọn trực tiếp). Hướng dẫn: - Khai báo cấu trúc thông tin sinh viên struct ttsinhvien { char MSSV[10], hoten[30]; int gioitinh; //1: nữ, 0: nam char diachi[50]; float dtb; }; typedef struct ttsinhvien SINHVIEN; GV: Dương Thành Phết – http://www.thayphet.net Trang 3
  • 4. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật - Viết các hàm sau: void Nhap1SV(SINHVIEN &sv); //Nhập thông tin 1 sinh viên void NhapDSSV(SINHVIEN dssv[], int &n); //Nhập danh sách sinh viên void Xuat1SV(SINHVIEN sv); //Xuất thông tin 1 sinh viên void XuatDSSV(SINHVIEN dssv[], int n); //Xuất danh sách sinh viên int TimSV(SINHVIEN dssv[], int n, char maso[]); //Tìm sinh viên void XoaSV(SINHVIEN dssv[], int n, char maso[]); //Hàm xóa void SapTheoDTB(SINHVIEN dssv[], int n); //Sắp xếp theo điểm tb void SapTheoHoTen(SINHVIEN dssv[], int n); //Sắp xếp theo họ tên void Hoanvi(SINHVIEN &a, SINHVIEN &b); // Hoán vị 2 sinh viên Lưu ý: Dùng hàm stricmp() để so sánh 2 chuỗi - Hàm chính (main()): Nhập danh sách sinh viên. Xuất danh sách. Nhập mã số sinh viên (x) cần xóa. Xóa x. Xem kết quả sau khi xóa. Sắp xếp theo điểm trung bình, xuất và xem kết quả. Sắp xếp theo họ tên, xuất và xem kết quả. Phần II: Bài tập danh sách liên kết – ngăn xếp, hàng đợi (25 tiết) Cấu trúc tổng quát của chương trình: Chương trình mẫu: Nhập và xuất danh sách liên kết đơn các số nguyên #include <iotream.h> #include <stdlib.h> struct tNODE { int Key; struct tNODE *pNext; }; typedef struct tNODE NODE; struct tList { NODE *pHead, *pTail; GV: Dương Thành Phết – http://www.thayphet.net Trang 4
  • 5. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật }; typedef struct tList LIST; void KhoiTao(LIST &l); void Huy(LIST &l); NODE *TaoNode(int x); void ThemDau(LIST &l, NODE *p); void Nhap(LIST &l); void Xuat(LIST l); void main() { LIST l; Nhap(l); cout<<"nDanh sach vua nhap: "; Xuat(l); Huy(l); } void KhoiTao(LIST &l) { l.pHead=l.pTail=NULL; } void Huy(LIST &l) { NODE *p; while(l.pHead) { p=l.pHead; l.pHead=l.pHead->pNext; delete p; } } NODE *TaoNode(int x) { NODE *p; p=new NODE; if(p==NULL) { cout<<"Khong cap phat duoc vung nho, ket thuc"; exit(0); } p->Key=x; p->pNext=NULL; return p; } void ThemDau(LIST &l, NODE *p) { if(l.pHead==NULL) l.pHead=l.pTail=p; else { p->pNext=l.pHead; l.pHead=p; } } void Nhap(LIST &l) { int x; NODE *p; GV: Dương Thành Phết – http://www.thayphet.net Trang 5
  • 6. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật KhoiTao(l); Do { cout<<"Nhap gia tri vao danh sach (Nhap 0 ket thuc): "; cin>>x; if(x==0) break; p=TaoNode(x); ThemDau(l,p); }while(true); } void Xuat(LIST l) { NODE *p=l.pHead; while(p) { cout<<p->Key<<” “; p=p->pNext; } } Bài 1: Cho danh sách liên kết đơn gồm các phần tử là số nguyên, viết chương trình thực hiện các yêu cầu sau: 1. Thêm một phần tử vào đầu danh sách. void ThemDau(LIST &l, NODE *p); 2. Xuất danh sách ra màn hình. void Xuat(LIST l); 3. Liệt kê các phần tử mang giá trị chẵn. void XuatChan(LIST &l) { NODE *p=l.pHead; while(p) { Nếu p->Key chẵn in giá trị p->Key p=p->pNext; } } GV: Dương Thành Phết – http://www.thayphet.net Trang 6
  • 7. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật 4. Tìm phần tử có giá trị lớn nhất. NODE *TimMax(LIST l) { NODE *pmax=l.pHead; for(NODE *p=l.pHead->pNext; p; p=p->pNext) Nếu giá trị của pmax < giá trị của p thì gán lại pmax = p; return max; } 5. Đếm số lượng số nguyên tố trong danh sách. bool LaSNT(int x); //Kiểm tra x có phải là số nguyên tố int DemSNT(LIST l);//Đếm số lượng số nguyên tố trong danh sách 6. Thêm phần tử có giá trị nguyên X vào trước phần tử có giá trị chẵn đầu tiên trong danh sách. Nếu không có phần tử chẵn thì thêm vào đầu danh sách. NODE *TimChanDau(LIST l);//Tìm chẵn đầu trong danh sách void ThemkTruocp(LIST &l, NODE *p, NODE *k);//Thêm k vào trước p void ThemXTruocChanDau(LIST &l, int X)//Thêm X vào trước chẵn đầu { NODE *k=TaoNode(X);//Phần tử cần thêm NODE *p=TimChanDau(l);//Node có giá trị chẵn đầu tiên if(p==NULL) ThemDau(l, k); else ThemkTruocp(l, p, k); } Ví dụ cách sử dụng hàm ThemXTruocChanDau() void main() { LIST l; int x; Nhap(l); cout<<“Danh sach vua nhap: n”; Xuat(l); cout<<“nNhap gia tri can them vao truoc chan dau: “; cin>>x; ThemXTruocChanDau(l, x); cout<<“nDanh sach sau khi them vao truoc chan dau:n”; Xuat(l); } 7. Thêm phần tử có giá trị nguyên X vào sau phần tử có giá trị lẻ cuối cùng trong danh sách. Nếu không có phần tử lẽ thì thêm vào cuối danh sách. NODE *TimLeCuoi(LIST l);//Tìm lẻ cuối cùng trong danh sách void ThemCuoi(LIST &l, NODE *p);//Thêm p vào cuối danh sách void ThemkSaup(LIST &l, NODE *p, NODE *k);//Thêm k vào sau p void ThemXSauLeCuoi(LIST &l, int X);//Thêm X vào sau lẻ cuối GV: Dương Thành Phết – http://www.thayphet.net Trang 7
  • 8. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật 8. Xóa phần tử nhỏ nhất trong danh sách (Nếu trùng chỉ xóa phần tử nhỏ nhất đầu tiên). NODE *TimMin(LIST l);//Tìm node có giá trị nhỏ nhất void XoaDau(LIST &l);//Xóa node đầu của danh sách void XoaCuoi(LIST &l);//Xóa node cuối của danh sách void Xoap(LIST &l, NODE *p);//Xóa node p void XoaMin(LIST &l);//Xóa phần tử nhỏ nhất trong danh sách 9. Nhập vào phần tử X, xóa phần tử đứng sau và đứng trước phần tử X trong danh sách. NODE *TimX(LIST l, int X);//Tìm X void XoakTruocp(LIST &l, NODE *p, NODE *k);//Xóa k trước p void XoakSaup(LIST &l, NODE *p, NODE *q);//Xóa k sau p 10. Tách danh sách thành 2 danh sách, sao cho: - Danh sách thứ nhất chứa các phần tử là số nguyên tố. - Danh sách thứ hai chứa các phần tử còn lại. void Tach(LIST l, LIST &l1, LIST &l2) { KhoiTao(l1); KhoiTao(l2); NODE *p=l.pHead, *pAdd; while(p) { int k = p->Key; pAdd=TaoNode(k); Nếu k là số nguyên tố thì ThemDau(l1, pAdd); Ngược lại ThemDau(l2, pAdd); p trỏ đến node kế tiếp } } Bài 2: Cho 2 danh sách liên kết đơn l1 và l2 gồm các phần tử là số nguyên, viết chương trình thực hiện các yêu cầu sau: 1. Sắp xếp l1 và l2 tăng dần. void SapXep(LIST &l); 2. Nối l1 và l2 thành l3 sao cho l3 vẫn có thứ tự tăng dần. void Noi(LIST l1, LIST l2, LIST &l3); Bài 3: Cho danh sách liên kết đơn quản lý thông tin của các sinh viên của 1 lớp học (tối đa 50 sinh viên). Mỗi sinh viên gồm các thông tin: MSSV, họ và tên, giới tính, địa chỉ và điểm trung bình. Viết chương trình thực hiện các yêu cầu sau: GV: Dương Thành Phết – http://www.thayphet.net Trang 8
  • 9. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật 1. Thêm 1 sinh viên vào danh sách. 2. In ra danh sách sinh viên. 3. Xóa 1 sinh viên với MSSV cho trước khỏi danh sách. 4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình. 5. Liệt kê các sinh viên có điểm trung bình >=5.0. 6. Đếm số lượng sinh viên nam. 7. Cập nhật điểm trung bình của một sinh viên thông qua mã số sinh viên. Bài 4 (Bài tập làm thêm): Dùng danh sách liên kết đơn để biểu diễn 2 số lớn (số có vài chục chữ số trở lên), viết chương trình thực hiện các yêu cầu sau: 1. Cộng 2. Trừ 3. Nhân 4. Chia hai số trên. Bài 5 (Bài tập làm thêm): Cài đặt lại câu 1 của phần II dùng danh sách liên kết kép. Bài 6: Dùng kỹ thuật mảng để cài đặt minh họa các thao tác cơ bản: pop, push, … trên ngăn xếp (hoặc hàng đợi) Bài 7: Ứng dụng bài 6 để cài đặt chương trình cho phép nhận vào biểu thức gồm các số, các toán tử +, -, *, /, các dấu đóng mở ngoặc và tính giá trị của biểu thức này Ví dụ: - Nhập biểu thức: (2*3)+9-(3+4) - In kết quả của biểu thức: 8 Phần III: Bài tập cây nhị phân tìm kiếm (10 tiết) Bài 1: Khai báo cấu trúc dữ liệu cây nhị phân (các node có giá trị là số nguyên) và viết chương trình thực hiện các yêu cầu sau: 1. Nhập và duyệt cây theo các thứ tự: trước, giữa và sau. 2. Tìm node có giá trị x trên cây. 3. Tìm node có giá trị nhỏ nhất. 4. Tìm node có giá trị lớn nhất. 5. Tính độ cao của cây. 6. Đếm số nút lá của cây. 7. Đếm số nút có đúng 2 cây con. 8. Đếm số nút có đúng 1 cây con. 9. Xóa nút có giá trị x. Bài 2 (Bài tập làm thêm):Viết chương trình tạo và tra cứu từ điển Anh – Việt đơn giản. GV: Dương Thành Phết – http://www.thayphet.net Trang 9
  • 10. Bài tập thực hành Cấu trúc dữ liệu & Giải thuật 1. Thêm 1 sinh viên vào danh sách. 2. In ra danh sách sinh viên. 3. Xóa 1 sinh viên với MSSV cho trước khỏi danh sách. 4. Sắp xếp danh sách sinh viên theo thứ tự tăng dần của điểm trung bình. 5. Liệt kê các sinh viên có điểm trung bình >=5.0. 6. Đếm số lượng sinh viên nam. 7. Cập nhật điểm trung bình của một sinh viên thông qua mã số sinh viên. Bài 4 (Bài tập làm thêm): Dùng danh sách liên kết đơn để biểu diễn 2 số lớn (số có vài chục chữ số trở lên), viết chương trình thực hiện các yêu cầu sau: 1. Cộng 2. Trừ 3. Nhân 4. Chia hai số trên. Bài 5 (Bài tập làm thêm): Cài đặt lại câu 1 của phần II dùng danh sách liên kết kép. Bài 6: Dùng kỹ thuật mảng để cài đặt minh họa các thao tác cơ bản: pop, push, … trên ngăn xếp (hoặc hàng đợi) Bài 7: Ứng dụng bài 6 để cài đặt chương trình cho phép nhận vào biểu thức gồm các số, các toán tử +, -, *, /, các dấu đóng mở ngoặc và tính giá trị của biểu thức này Ví dụ: - Nhập biểu thức: (2*3)+9-(3+4) - In kết quả của biểu thức: 8 Phần III: Bài tập cây nhị phân tìm kiếm (10 tiết) Bài 1: Khai báo cấu trúc dữ liệu cây nhị phân (các node có giá trị là số nguyên) và viết chương trình thực hiện các yêu cầu sau: 1. Nhập và duyệt cây theo các thứ tự: trước, giữa và sau. 2. Tìm node có giá trị x trên cây. 3. Tìm node có giá trị nhỏ nhất. 4. Tìm node có giá trị lớn nhất. 5. Tính độ cao của cây. 6. Đếm số nút lá của cây. 7. Đếm số nút có đúng 2 cây con. 8. Đếm số nút có đúng 1 cây con. 9. Xóa nút có giá trị x. Bài 2 (Bài tập làm thêm):Viết chương trình tạo và tra cứu từ điển Anh – Việt đơn giản. GV: Dương Thành Phết – http://www.thayphet.net Trang 9