Tải bản đầy đủ (.ppt) (34 trang)

Ôn tập, cấu trúc dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (152.19 KB, 34 trang )

Ôn tập môn CTDL
Ôn tập môn CTDL
Năm 2013
PGS.TS. Trần Cao Đệ
Bà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ố.
Bà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ử đó.
Nếu không tìm thấy thì trả ra cặp (NULL,NULL)
#include <stdio.h>
#include <malloc.h>
typedef struct {
int Tuso;
int Mauso;
} 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;
void MAKENULL_LIST(List& Header){
(Header)=(Node*)malloc(sizeof(Node));

Header->Next= NULL;
}
void INSERT_FIRST_LIST(ElementType X, List& L){
Position T=(Node*)malloc(sizeof(Node));
T->Element=X;
T->Next=L->Next;
L->Next=T;
}
Co san
INSERT_LIST(X,P,L)
Goi
void INSERT_FIRST_LIST(ElementType X, List& L){
INSERT_LIST(X,???,L);
}
void DELETE_LIST(Position P, List& L){
Position T;
if (P->Next!=NULL){
T=P->Next;
P->Next=T->Next;
free(T); //thu h?i vùng nh?
}
}

void READ_LIST_REVERSE(List& L){

int n;

ElementType x;

printf("Nhap so phan tu cua danh sach: ");


scanf("%d",&n);

for (int i=1; i<=n; i++){

printf("nhap phan so thu %d: ",i);

printf("nhap tu so ");

scanf("%d",&x.Tuso);

printf("nhap mau so ");

scanf("%d",&x.Mauso);

INSERT_FIRST_LIST(x, L);

}

}
void 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");
}
int 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);
}
void LAM_TOI_GIAN(List& L){
for(Position p = L; p->Next!=NULL; p=p->Next){
int UC = UCLN(p->Next->Element.Tuso,
p->Next->Element.Mauso);
if (UC>1){
p->Next->Element.Tuso =
p->Next->Element.Tuso/UC;
p->Next->Element.Mauso =
p->Next->Element.Mauso/UC;
}
}
}
void 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;
}
}
Tìm hai phân số tích = 1
Typedef struct KQ{
Position r,t;
}
KQ tim_tich1(List L){
KQ ketqua; ketqua.r = NULL; ketqua.t = NULL;

Position p= L;
while (p->Next!=NULL){
q = p->Next;
while (q->Next!=NULL){
if (p->Next->Element.Tuso * q->Next->Element.Tuso ==
q->Next->Element.Mauso * p->Next->Element.Mauso ){
ketqua.r = p;
ketqua.t = q;
return ketqua;
}
q=q->Next;
}
p=p->Next;
}
return ketqua;
}

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

}

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
LAM_TOI_GIAN(L);
PRINT_LIST(L); // In danh sach len man hinh
}
Bà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ị.
Bài 3-LT-TH


Viết thủ tục đổi số thập phân sang số thập lục
phân.

Viết chương trình cho phép nhập vào số nguyên
và đổi nó ra số thập lục phân.

Ví dụ: 20
10
 14
16
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 A B C D E F
Bài 4 - TH
Viết chương trình tính giá trị biểu thức khi cho
biểu thức dạng hậu tố.
Giả sử :

Các toán hạng và các toán tử đều là 1 kí tự, ví
dụ: 65*89+- tức là (6*5)–(8+9)

Biểu thức chỉ chứa các phép toán:
+,- và *
Bà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.
Bà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ự
ea
/
+
f
-
*
ba
+
c
*
e
d
-
Tien tu: / * - + a b c – d * e f + a e

Hau tu: a b + c – d e f * - * a e + /
Bài 7 – LT - TH
Cho cây như hình vẽ, hãy viết các
biểu thức duyệt tiền tự, hậu tự
và biểu thức duyệt cây theo
mức.
Hãy viết các khai báo thích hợp để
cài đặt cây (tổng quát) có nhãn
là kí tự bằng con trỏ theo cách
biểu diễn LeftMost_Child và
Right_Sibling. Dùng các khai
báo đó viết:

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.
Bà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.
Bà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.
Bài 10 - LT
Giả sử bảng băm có B=11 bucket, hàm băm là
h(x)= x mod B. Hãy vẽ hình biểu diễn bảng
băm khi ta lần lượt đưa vào bảng băm rỗng
các khoá 36, 29, 26, 14, 23, 46, 58, 12, 31, 20

trong các trường hợp:
- 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.

×