lí thuyết.
1:cài dặt bằng mảng.
2:cài đặt bằng con trỏ.
3:cây.
4:danh sach lien ket kép.
6:hàng đợi.
Bắt đầu ôn:
Câu 1( 3 điểm)
1) Th liu tinh sn ) c lc cao?
2) liu tinh c l ) bit?
3) Ti sao ch s dng c liu tinh u v vic t
ch d liu ca mng dng thc t ?. Mt s ng dng
phi cn s du lii l ?
mng d th hi
Câu 1
1) C liu tinh c ng l lic
sn trong lp i l vic s di (1 đ)
3) M liu ting, bn ghi, tp tin, (1 đ)
liu ti ly c nhu cu
d liu ln ca mi bn cht cng d li
trong thc t i ta c lii l . (0.5 đ)
u qu
dng c liu mng (c h
c hi
tt c h u s ng h c t l (0.5 đ)
Câu 1( 2 điểm)
quy phn thu tru
) minh ha ?
Câu 1
quy phn thu tr hin
ch gii s ng d lin, ta gii s ng d li
a, c th g n gng hy ra suy bing
hc x ng ca chin thu tr (1 đ)
: (1 đ)
Chy chm mt gii thu
-1)!, (n-n+1) = 1! = 1.
Câu 1(bài làm)
m ca gii thu quy: ( 1 đ)
- Trong gii thu quy bao gi i g
- Sau mi li g c cc thu nh c
- ng hp suy bic gii quyt theo m
gii thu
Câu 3(so sánh cài đặt mảng con trỏ) ;
t c mt tp hp hu hn bin t thuc
t l (0.5 đ)
i mi con tr ti
i (danh ng:
t bi mng: ( 0.5 đ)
Const n=maxlist;
Type list = record
Eles: array[1 n]of integer;
Count: 0 n;
end;
Var L: list;
t bi con tr: (0.5 đ)
type list=^nut;
nut = record
infor: item;
next:list;
end;
var l,f:pqueue;
qu
Ưu nhược điểm của từng các cài đặt danh sách: (0.5 đ)
a) i mng
Ưu điểm
i. truy cn t c tip i vi mi phn
t
ii. c hii d
Nhược điểm
iii. a b nh: Hing gi ch i
iv. B hn ch b tip trong b nh
v. li gii hn nh trong thanh ghi d li
thanh ghi stack
vi. ch chuyn t khi thc hi sung
phn t, hoc loi b phn t i thut
phc theo
b) t bi con tr
Ưu điểm:
- nh (Hing gi ch
t bi mng)
- C lit bi con tr ng,
nh c c gii hn b
i vi c li
- n t m nhng v n dc
nhn m k tit bi
mng
Nhược điểm:
- T truy cn t i
vi mi phn t (truy cp tun t mt chiu)
- T phn t c li phn t c
- mi phn t a ch ca
.
Câu 1( 2 điểm)
Th lii thut? C lii thu
i quyt mc? Anh (Chy m minh hu
Lg: Câu 1
+ Giải thuật nh cht ch nh mt s i
lit s hu hc thc hic kt qu mong mun
(0.5 đ)
c t chc biu din d li li c x c
g cấu trúc dữ liệu (0.5 đ)
ng trong vic gii quyt my:
=> mun vic t ta ph liu ti thut t
gii quy (0.5 đ)
Câu 1( 1 điểm)
Anh (Ch li c h u. t
c c
Lg :Câu 1 (1đ)
+ Mt s c ling, bn ghi, t
2 t bng mng.
Bài 1: cài đặt danh sách bởi mảng: (0.5 đ)
Const n=maxlist;
Type list = record
Ele: array[1 n]of integer;
Count: 0 n;
end;
Var L: list;
tng vu:
1) ng c (0.5 đ)
function Trungbinh(l:list): integer;
var i, tam: integer;
Begin
for i:=1 to n do tam:= tam+L.Ele[i];
Trungbinh:=tam;
End;
2) Loi b s (1 đ)
procedure Loaibo(var L: list);
var k,i:integer; found: boolean;
Begin
found:= false;
k:=1;
while (not found)and(k<=L.count) do
if(L.Ele[k]=3) then
begin
for i:=k to L.count-1 do L.Ele[i]:=L.Ele[i+1];
L.count:= L.count -1;
end;
if (not found) then writeln(‘So 3 khong co trong danh sách để loại bỏ’);
End;
3) Hin th (1 đ)
procedure Hienthi(l:list);
var i: integer;
begin
writeln(‘Danh sách cac so nguyen la:’);
for i:=1 to l.count do write(l.Ele[i]:6);
end;
Câu 2( 5 điểm )
Gi s ta cn quc sinh, mi hc sinh gm nh
Lm tng kt dng mng. Vt
ng vu sau:
1) Nh
2) k:
H Nguyen Van An
Lp: TH2B
7.4
3) Sp xp hc sinh theo tng lng ln)
4) c sinh theo tng lp
5) Loi b kht c m tng kt <5
t s p t
Lg: Câu 2
+ Dt (0.5 đ)
const n=50;
type hocsinh = record
Hoten: string[27];
lớp: string;
DiemTk: real;
end;
list = record
Eles: array[1 n]of hocsinh;
count: 0 n;
end;
var L: list;
+ Tc sinh: (1 đ)
procedure taoDS(var l:list);
var M: hocsinh;
begin
write(’nhap so hoc sinh trong danh sách n= ’); readln(n);
for i:=1 to n do
begin
writeln(‘Nhap hoc sinh thu i : ’);
write(‘Nhạp ho ten: ’); readln(M.Hoten);
write(‘Nhạp Lớp: ’); readln(M.lop);
write(‘Nhạp Điem tong kết: ’); readln(M.DiemTK);
insert(M,i,L);
end;
end;
p:TH2B t u danh
(1 đ)
procedure insert (M: hocsinh, k: integer, var L: list);
var i: integer;
begin
i:=L.count;
while i>k do
begin
L.Eles[i]:=L.Eles[i-1];
i:=i-1;
end;
L.Eles[k]:= M;
L.count:=L.count +1;
end;
c khi gi th tp l c a hc sinh c
nh M
+ Sp xng lp, in ng l 01
(1,5 đ)
+ Loi b tt c m tng kt <5 ra kh (1 đ)
m tng kt <5, gi s v
b2) Loi b hc sinh v
b3) Lp ln khi ht v y
- c sinh thu kin ta duyt t
dng
- loi b hc sinh v c sinh t n L.count l, gim
t bng con tr.
Câu 2( 4 điểm )
Gi s m cn qu, mi cn qu: H
, gia ch, chc danh . Anh(ch) hla chn mt cu li
qu
- D li nh trong
- Thun l
- Tit ki nh nht.
Vi c lia chn. Anh(ch
1) Vit dt ca c li
2) Vit gii thut m s
3) Hin th
4) Loi b nhn tui v t rng nam: 60 tui; n: 55 tu
Lg: Câu 2
1) C liu la ch ( 1 đ)
Dt
Type Canbo = record
Hoten: String;
Năm sinh : integer;
Giớitinh: boolean;
Diachi, trinhdo, chucdang: string;
` Next: ^ Canbo;
end;
List = ^Canbo;
Var L: List;
2) m s trong ( 1 đ)
- S dng bi ng trong u dem:= 0 ,
- S dng con tr ph M duyt t n cun
- In bi
3) Hin th : ( 1 đ)
S dng con tr ph M duyt t n cun hin
th :
4) Loi b n tui v : ( 1 đ)
n tui v , gi s v c tr bi p
b2) Loi b v
b3) Lp ln khi ht v y
- thu kin ta duyt t p:=L
dng
- loi b hc sinh v p:
a) Di chuyn con tr ph n v c p:
M:=L;
While M^.next <>p do M:=M^.next;
b) Bt, gt, gi
M^.next:=p^.next;
Dispose(p);
Câu 3( 4 điểm )
Hc sinh khi 12 d thi ht hc k i ng. Mn qu
p
1. dng c li
d thi. Vit dng ca c
2. c him v sau:
- Nh u kin dp SBD = rng)
- Hin th thi theo lp
- Loi b
(toan+ly+hoa+ngoaingu)/4)
-
Lg: Câu 3
1) D (0.5 đ)
Type Thisinh = Record
SDB, Hoten, Lop: String;
Toan, ly, hoa, ngoaingu: real;
End;
List = ^ node;
Node = Record
Info: Sinhvien;
Next: list;
End;
Var L: list
a) Nh (1 đ)
procedure taoDS(var l:list);
var M: hocsinh, SBD: string, i: integer;;
begin
write(’nhap so bao danh của hoc sinh dau tiên, SBD = ’); readln(SBD);
while SDB<>’’ do
begin
i:=1;
writeln(‘Nhap hoc sinh thu i : ’);
M^.info.SBD:=SBD;
write(‘Nhạp ho ten: ’); readln(M^.info.Hoten);
write(‘Nhạp Lớp: ’); readln(M^.info.lop);
write(‘Nhạp Điem toan: ’); readln(M^.info.toan);
write(‘Nhạp Điemly: ’); readln(M^.infor.ly);
write(‘Nhạp Điem hoa: ’); readln(M^.infor.hoa);
write(‘Nhạp Điem NgoaiNgu: ’); readln(M^.info.ngoaingu);
M^.next := L;
L:= M;
i:= i+1;
end;
end;
b) Sp xng l tng l 01
(1 đ)
c) Loi b tt c m <5 ra kh, bit r
+ ly+ hoa+ ngoaingu)/4: (1 đ)
m trung <5, gi s v
b2) Loi b hc sinh v
b3) Lp ln khi ht v y
- c sinh thu kin ta duyt t y
ng
- loi b hc sinh v a di chuyn con tr n v n v c
K, thc hin loi b: q^.next:=p^.next; dispose(p);
(0.5 đ)
- Nhp s
- Duyt t n cuy, hoc duyng.
Duy i s u
bt luy, np theo trong danh
Câu 2( 4 điểm)
Cho m c tr bi con tr n
t u d li
1) Vi
a. t phn t
b. t phn t
c. remove_first(loi b phn t
d. remove_last(loi b phn t cu
2) to ra mp cha n phn t
p t
3) Ln t trong i ra hin th
Lg: Câu 2
n t (0.5 đ)
Var m:list;
Begin
new(M);
m^.infor:= x;
M^.next:=L;
l:=M;
End;
2)procedure insert_last(x: t phn t (0.5 đ)
var M, p:list;
Begin
p:=L; while (p^.next <>nil) do p:=p^.next;
new(M);
M^.infor:= x;
p^.next := M;
m^.next:=nil;
End;
3) Procedure remove_first(var m: list; var L:list )(loi b phn t ti
phn t sau khi b loi b kh (0.5 đ)
Begin
if (L<>nil) then M:=L; L:=L^.next;
End;
4) Procedure remove_last(var M:list; var L:list)(loi b phn t cu ti
u khi loi b kh(0.5 đ)
var p,q:list;
Begin
if L<>nil Then
Begin
p:=L; q:=p^.next;
while (q^.next<>nil) do
begin
p:q; q:=q^.next;
end;
M:=q; p^.next:=nil;
End;
End;
2) tạo một hàng đợi và một ngăn xếp chứa n phần tử (1 đ)
a)Tạo ngăn xếp
procedure taoNgănxep(var Top:list);
var n, i, x:integer;
Begin
writeln(‘Nhap n=’); readln(n);
for i:= 1 to n do
write(‘Nhạp gia trị =’); readln(x); insert_first(x, Top);
End;
b) Tạo hàng đợi
procedure taohangdoi(var L,F:list);
var n, i, x:integer;
Begin
L:=nil; F:=nil;
writeln(‘Nhap n=’); readln(n);
for i:= 1 to n do
write(‘Nhạp gia trị =’); readln(x); insert_last(x, F);
End;
Lấy các phần tử trong hàng đợi và trong ngăn xếp hiển thị lên màn hình(1 đ)
procedure hienthi_nganxep(top:list);
var m:list;
begin
while top<>nil do
begin
remove_firsts(M, Top);
write(M^.infor);
end;
Tương tự với hàng đợi
4: cây.
Câu 2( 3 điểm ) 3
Gi s cn qu theo mt th
t t dng cha ca mnh s dng mng. V
vii thuc p t
Câu 2
+ Dng cha ca mnh: (1 đ)
Const n = <số các đỉnh tối đa trên cây>;
Type Node = Record
Info: Integer;
parent: 0 n;
End;
Tree = Array [1 n ] of Node;
Var T: Tree;
nh th k: (1 đ)
parent (T, k) := T[k].parent;
cnh th (1 đ)
Duy nh gc(i:=1), kim tra xem cha c
nu = k, kt lu, dng gii thut, nu cha cnh ting
p lng (found = true),
hoc duyt h t luy
Câu 3( 3 điểm ) 3
Cho m ca tc con
Anh(ch
1) Vit dn k ca mnh, s dng con tr
2) c c t
3) c?
\users \BT\
1 KB
Tin\
2 KB
Toan\
1KB
BT1
8 KB
Bt2
10 kB
Bt3
6 KB
BT1
9KB
BT2
10 kB
Lg:
+ Dn k ca mnh: (1 đ)
Type Tree = ^Nut;
Nut = record
Tenthumuc: string;
Kichco:integer;
EldestChild, Nextsibling:Tree;
End;
Var T: Tree;
+ Duy t nh tc cc (1 đ)
(1 đ)
- Bic c}
- Procedure postOder(T : tree, var tong:integer);
Var C: tree;
Begin
if (T=nil) then exit;
else
begin
C:=t^.eldestChild;
postOrder(C);
C:=C^.nextsibling;
While (C<>nil) do
Begin
postOrder(C);
C:= C^.nextsibling;
End;
Tong:=tong+T^.kichco;
end;
End;
Câu 3( 3 điểm )
u din biu thc sau:
3*4+(12+b)/6
T u thc va dng, anh (ch
1) Vit dng con tr,
2) Vit th tc duy t c, sau
3) Vit biu thi dng tin t, hu t? nhi kt qu duy
theo th t c, sau?
Lg: Câu 3
Dựng cây: (0.5 đ)
1) Dt: (0.5 đ)
Type Tree=^nut;
Nut= record
Info: string;
Left, right: Tree;
End;
Var T: Tree;
+
*
3
4
/
+
6
12
b
tc duy t c, sau:
Gi s tc duy
Th tc duy t c: (0.5 đ)
Procedure Preorder(T: Tree);
Begin
Write(T^.info);
Preorder(T^.left);
Preorder(T^.right);
End;
Th tc duy t sau: (0.5 đ)
Procedure postorder(T: Tree);
Begin
Postorder(T^.left);
Postorder(T^.right);
Write(T^.info);
End;
2) Biu thc tin t , hu t
c) + Biu thc tin t: (0.5 đ)
+*34/+12b6 => Biu thi kt qu duy t c
+ Biu thc hu t: (0.5 đ)
34*+12b+6/ => Biu thi kt qu duy t sau.
Câu 3 (2 điểm)
Cho m :
15
10
21
12
0
31
45
9
1
2
3
4
5
6
7
Anh (ch
a mnh (vit d
nh)
2) D nh c
c nh t
Câu 3(bài làm)
1) a mnh (1 đ)
* Dt
Const n= 50;
Type Member = Record
Id: 0 n;
Next:^Member;
End;
Node = Record
Infor: Item;
Child: ^Member;
End;
Tree=Array[1 n] of Node;
Var T: Tree;
Trong đó:
Id: Lưu chỉ danh của đỉnh;
Item: kiểu dữ liệu của thông tin lưu tại đỉnh
infor
Child
15
10
21
12
31
45
10
21
12
31
45
9
2) D (1 đ)
Câu 3 (2 điểm):Anh (ch m(binary search tree)? Ti ta
l m thun ln vi
kii mnh ra khi
th hi
Lg: Câu 3
m (0.5 đ) a mu kin:
u kinh c i gc
u kin 2: i gnh ci
15
10
21
12
0
31
9
45
u ki
* Cc ht thun l phc tng hp xu nht
v mt thi gian O(h), viu cao c n l
(0.5 đ)
th hi phc tt v mt thi gian, vng
tn ti ci hong(1 đ)
Câu 1(2 điểm)
m ca
tt.
Lg:Câu 1
(0.5 đ)
ros con ti mc s
i
i con tr: (0.5 đ)
Type TreeBina = ^ Nut;
Nut = Record
Infor: Integer;
Left, Right: TreeBina;
End;
Var T : TreeBina;
m ca tng dt: (0.5 đ)
t bi mng:
m: - c hii d
- vic truy cc tip, t truy c
i vi mi phn t
Hn ch: - n ta b nh
t bi con tr
m: - a b nh
Hn ch: - Truy cn t p tun t, bao gi
gc, truy cm
-
Câu 2(4 điểm ):Cho m t dt
ng con tr, gc cc tr bi con tr R. Vi dt th tc
ng vu cu sau:
1) T u kin d
2) C
3) Loi b
4) m s nh hi
lG: Câu 2
+ D dng con tr: (0.5 đ)
Type TreeBSearch = ^Nut;
Nut = Record
Infor: Integer;
Left, Right: TreeBSearch;
End;
Var R : TreeBSearch;
+ T m: (1 đ)
- Vit th t
* S dng con tr ph M cha ch cn
* Xin MT c cho M
d liu c a ch M
* G
Nng (R = nil): R := M
Nnh v
If (x<R^.info) then Insert (x, R^.Left)
Else if (x>R^.info) then Insert(x, R^.right);
- u kin nhng (x<>0):
Nhp d liu mi c
p gi th tnh m
(1 đ)
- Nhp x
- S dng con tr ph p duyt bu t gn khi p = nil ho
dng: Nng gii thut, Nu x< P^.Infor:
c li P => p := p^.right
vit gii thut i d quy)
+ Loi b (1 đ)
- tr t
- Nnh loi b
- Nnh loi b ng, mt con = rng
i b, gi
- Nnh loi b i
b t c