Hãy viết các khai báo thích hợp để cài đặt một danh sách liên kết chứa các phần tử là phân số.. Dùng các khai báo đó để viết: Thủ tục để tạo danh sách L rỗng.. Hãy viết các khai báo t
Trang 1Ôn tập môn CTDL
Năm 2013 PGS.TS Trần Cao Đệ
Trang 2Bài 1 – LT - TH
Một phân số a/b (với a,b là số nguyên và b khác 0) được biểu diễn như một bản ghi có hai trường: Tử số và mẫu số Hãy viết các khai báo
thích hợp để cài đặt một danh sách liên kết chứa các phần tử là phân
số Dùng các khai báo đó để viết:
Thủ tục để tạo danh sách L rỗng
Thủ tục thêm một phần tử vào đầu danh sách
Viết thủ tục làm tối giản tất cả các phân số có trong danh sách (phân
số tối giản thì ước chung lớn nhất của tử số và mẫu số bằng 1)
Thủ tục (hoặc hàm) tìm trong danh sách L hai phần tử có tích bằng 1 Nếu tìm thấy thì trả ra một cặp con trỏ trỏ đến hai phần tử đó Nếu không tìm thấy thì trả ra cặp (NULL,NULL) trong đó NULL là giá trị qui ước con trỏ không có giá trị
Thủ tục tìm kiếm và xóa các phần tử của danh sách có tử số lớn hơn mẫu số
Trang 3Bài 12
Một phân số a/b (với a,b là số nguyên và b khác 0) được
biểu diễn như một bản ghi có hai trường: Tử số và mẫu số Hãy viết các khai báo thích hợp để cài đặt một danh sách liên kết chứa các phần tử là phân số Dùng các khai báo đó
để viết:
• Thủ tục để tạo danh sách L rỗng.
• Thủ tục thêm một phần tử vào đầu danh sách.
• Thủ tục in ra các phần tử trong danh sách
• Viết thủ tục làm tối giản tất cả các phân số có trong danh sách (phân
số tối giản thì ước chung lớn nhất của tử số và mẫu số bằng 1).
• Thủ tục tìm kiếm và xóa các phần tử của danh sách có tử số lớn
hơn mẫu số.
• Thủ tục (hoặc hàm) tìm trong danh sách L hai phần tử có tích bằng
1 Nếu tìm thấy thì trả ra một cặp con trỏ trỏ đến hai phần tử đó
Trang 4} ElementType; //ki?u c?a ph?n t? trong danh sách
typedef struct Node{
ElementType Element
Node* Next;
};
typedef Node* Position; // Ki?u v? trí
typedef Position List;
Trang 5void MAKENULL_LIST(List& Header){
(Header)=(Node*)malloc(sizeof(Node)); Header->Next= NULL;
}
Trang 6void INSERT_FIRST_LIST(ElementType X, List& L){ Position T=(Node*)malloc(sizeof(Node));
Trang 7void DELETE_LIST(Position P, List& L){ Position T;
Trang 8 for (int i=1; i<=n; i++){
printf("nhap phan so thu %d: ",i);
Trang 9void PRINT_LIST(List& L){
printf ("cac phan so trong danh sach la: ");
for(Position p = L; p->Next!=NULL; p=p->Next)
printf("%d / %d; ",p->Next->Element.Tuso,
p->Next->Element.Mauso); printf("\n");
}
Trang 10int UCLN(int a, int b){
if (a==b) return a;
else if (a>b) return UCLN(a-b,b); else return UCLN(a,b-a);
}
Trang 11p->Next->Element.Mauso/UC; }
}
}
Trang 12void TIM_XOA(List& L){
Position P=L;
while (P->Next!=NULL){
if (P->Next->Element.Tuso> P->Next->Element.Mauso) DELETE_LIST(P,L);
else
P=P->Next;
}
}
Trang 13ketqua.r = p;
ketqua.t = q;
return ketqua;
}q=q->Next;
}
p=p->Next;
}
return ketqua;
Trang 14 int main(){
List L;
MAKENULL_LIST(L); //Kh?i t?o danh sách r?ng
READ_LIST_REVERSE(L);
printf("Danh sach vua nhap: ");
PRINT_LIST(L); // In danh sach len man hinh
}
Trang 15int main(){
List L;
MAKENULL_LIST(L); //Kh?i t?o danh sách r?ng READ_LIST_REVERSE(L);
printf("Danh sach vua nhap: ");
PRINT_LIST(L); // In danh sach len man hinh LAM_TOI_GIAN(L);
PRINT_LIST(L); // In danh sach len man hinh }
Trang 16Bài 2 – LT - TH
Một điểm trong mặt phẳng được biểu diễn bằng một cặp tọa độ (x,y), với x,y là số thực Như vậy, có thể cài đặt điểm như là một bản ghi có hai
trường x,y Hãy viết các khai báo thích hợp để cài đặt một danh sách
liên kết chứa các phần tử là điểm Dùng các khai báo đó để viết:
Thủ tục để tạo danh sách L rỗng
Thủ tục thêm vào đầu danh sách một phần tử
Thủ tục tìm kiếm và xóa các phần tử của danh sách là các điểm có khoảng cách tới gốc tọa độ lớn hơn k, với k là một số nguyên nào đó
Thủ tục in ra các phần tử của danh sách L là các điểm nằm trên
đường thẳng y=x
Thủ tục (hoặc hàm) tìm trong danh sách L hai phần tử đối xứng nhau qua gốc tọa độ (0,0) Nếu tìm thấy thì trả ra một cặp con trỏ trỏ đến hai phần tử đó Nếu không tìm thấy thì trả ra cặp (NULL,NULL) trong
đó NULL là giá trị qui ước con trỏ không có giá trị
Trang 19Bài 5-LT-TH
Một sinh viên được biểu diễn như một bản ghi có 3 trường:
MSSV: là số nguyên, vd: 1234
Họ tên: chuỗi kí tự, vd “ Le Hoa Binh”
Ngày tháng năm sinh: chuỗi kí tự, vd “10/11/1985”
Hãy cài đặt một hàng bằng con trỏ chứa các phần tử là sinh viên Viết chương trình cho phép:
- Nhập vào một số sinh viên, lưu trữ trong hàng
- Xóa lần lượt các SV trong hàng và in ra các sinh viên
theo thứ tự xóa
Trang 20Bài 6 - LT
Cho biểu thức: (a+b-c)*(d-e*f)/(a+e)
Hãy vẽ cây biểu diễn cho biểu thức Sau đó, viết các biểu thức duyệt:
Tiền tự
Hậu tự
Trang 21e a
a
*
e d -
Tien tu: / * - + a b c – d * e f + a e
Hau tu: a b + c – d e f * - * a e + /
Trang 22 Thủ tục tạo cây mới
Create2(v,T1,T2)
Các thủ tục/ hàm để duyệt tiền
tự, trung tự, hậu tự cây
Chương trình phải tự tạo 1 cây (ít nhất 6 nút), in các biểu thức duyệt cây
Trang 23Bài 8 – LT - TH
Một cây nhị phân được cài đặt bằng con trỏ, mỗi nút (Node) có
4 trường: trường value chứa nhãn của nút, trường left trỏ đến con trái, trường right trỏ đến con phải, trường parent trỏ đến nút cha Hãy viết các khai báo thích hợp để cài đặt cây nhị
phân có nhãn là số nguyên Dùng các khai báo đó để viết:
Hàm kiểm tra hai nút n,m có phải là hai nút anh em ruột hay không Hàm phải trả ra true nếu n,m là hai nút anh em ruột (có cùng nút cha); ngược lại hàm trả về false.
Hàm kiểm tra một nút n có phải là tổ tiên (ancestor) của nút m hay không Hàm trả về true nếu n là tổ tiên của m; ngược lại hàm trả về false.
Hàm trả ra số nút chỉ có một nút con trên cây.
Thủ tục duyệt cây theo mức
Trang 24Bài 9 – LT - TH
Hãy viết các khai báo thích hợp để cài đặt một cây tìm kiếm
nhị phân chứa các khóa là số nguyên Dùng các khai báo
đó để viết:
Hàm kiểm tra một nút có phải là nút lá hay không Hàm phải trả về true nếu nút là nút lá, trả về false nếu nút
không phải là nút lá.
Hàm đếm số nút chỉ có một nút con trên cây.
Hàm tìm kiếm một nút có khóa k trên cây Hàm phải trả ra con trỏ trỏ đến nút chứa khóa k hoặc trả ra NULL nếu
không có nút nào chứa khóa k
Thủ tục thực hiện duyệt cây theo mức.
Trang 25- Dùng bảng băm mở.
- Bảng băm đóng với chiến lược giải quyết đụng
độ là phép thử cầu phương.
Trang 265812
Trang 28Bài 11-TH
Một điểm trong mặt phẳng được biểu diễn bằng một cặp tọa độ (x,y), với x,y là số thực Như vậy, có thể cài đặt điểm như là một bản ghi có
hai trường x,y Hãy cài đặt hàng ưu tiên chứa
các phần tử là điểm với độ ưu tiên theo tọa độ
x
Chương trình phải cho phép:
- Nhập vào các điểm, lưu trữ trong hàng ưu tiên
- In ra các điểm dạng (x,y) theo thứ tự
DeleteMin.
Trang 29Bài 12-TH
Một sinh viên được biểu diễn như một bản ghi có 3 trường:
MSSV: là số nguyên, vd: 1234
Họ tên: chuỗi kí tự, vd “ Le Hoa Binh”
Ngày tháng năm sinh: chuỗi kí tự, vd “10/11/1985”
Hãy cài đặt bảng băm mở chứa các phần tử là sinh viên hàm băm dựa trên mã sinh viên và có dạng h(x)=(x.mssv % B)
Viết chương trình cho phép:
- Nhập vào một số sinh viên
- Tìm kiếm một Sv khi cho MSSV
- Xóa một SV khi biết MSSV.
- In danh sách tất cả sinh viên có trong bảng băm theo thứ tự trong bảng băm
Trang 30HẾT MÔN HỌC
Good luck !
Trang 317 8 9
29
26
14
23 46
58 12
Trang 33 Hãy vẽ hình minh họa bảng băm đóng khi ta
lần lượt đưa vào bảng băm đóng các khóa sau: 3, 8, 5, 10, 26, 36, 15, 38, 17, 24
Cho biết B=13, hàm băm h(x)=x mod B và
hàm băm lại hi(x)= (x+i2) mod B.
Viết các khai báo thích hợp để cài đặt bảng
băm mở Dùng các khai báo đó để viết hàm thêm một phần tử vào bảng băm
Trang 34Ôn tập
Bài 1: danh sách liên kết
Bài 2 : chương cây
Bài 3: chương 4