Tải bản đầy đủ (.pdf) (47 trang)

cấu trúc dữ liệu và thuật toán bằng pascal

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 (959.43 KB, 47 trang )

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  liu tinh sn ) c lc cao?
2)  liu tinh c l ) bit?
3) Ti sao ch s dng c liu tinh   u v vic t
ch d liu ca mng dng thc t ?. Mt s ng dng
phi cn s du  lii l ? 
mng d th hi

Câu 1
1) C liu tinh c ng l lic 
sn trong  lp i l vic s di (1 đ)
3) M liu ting, bn ghi, tp tin, (1 đ)
 liu ti ly  c nhu cu
 d liu ln ca mi  bn cht cng d li
trong thc t i ta c lii l . (0.5 đ)
 u qu 
  dng c liu mng (c  h 
c hi
  tt c h u s ng h c t l (0.5 đ)
Câu 1( 2 điểm)
 quy phn thu tru
 )  minh ha ?


 Câu 1
 quy phn thu tr  hin
 ch gii s ng d lin, ta gii s ng d li
 a, c th g n gng hy ra suy bing
hc x ng ca chin thu tr (1 đ)
: (1 đ)
Chy chm mt gii thu  
 -1)!, (n-n+1) = 1! = 1.
Câu 1(bài làm)
m ca gii thu quy: ( 1 đ)
- Trong gii thu quy bao gi i g
- Sau mi li g c cc thu nh c
- ng hp suy bic gii quyt theo m
gii thu

Câu 3(so sánh cài đặt mảng con trỏ) ;
t c  mt tp hp hu hn bin t thuc
t l (0.5 đ)
 i mi con tr ti
i (danh ng:
t bi mng: ( 0.5 đ)
Const n=maxlist;
Type list = record
Eles: array[1 n]of integer;
Count: 0 n;
end;
Var L: list;
t bi 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 mng
Ưu điểm
i. truy cn t c tip i vi mi phn
t
ii. c hii d 

Nhược điểm
iii. a b nh: Hing gi ch  i
iv. B hn ch b tip trong b nh
v.  li gii hn  nh trong thanh ghi d li
thanh ghi stack
vi. ch chuyn t khi thc hi sung
phn t, hoc loi b phn t         i thut
 phc theo
b) t bi con tr
Ưu điểm:
-  nh (Hing gi ch  
t bi mng)
- C lit bi con tr ng,
 nh c c gii hn b
i vi c li
- n t m  nhng v n dc
nhn m k tit bi

mng
Nhược điểm:
- T truy cn t i
vi mi phn t (truy cp tun t mt chiu)
- T phn t c li phn t c
- mi phn t   a ch ca
 .
Câu 1( 2 điểm)
Th  lii thut? C lii thu 
i quyt mc? Anh (Chy m minh hu

Lg: Câu 1
+ Giải thuật nh cht ch nh mt s i
 lit s hu hc thc hic kt qu mong mun
(0.5 đ)
c t chc biu din d li li c x c
g cấu trúc dữ liệu (0.5 đ)
ng trong vic gii quyt my:

=> mun vic t ta ph liu ti thut t
 gii quy (0.5 đ)
Câu 1( 1 điểm)
Anh (Ch  li c h u. t
c c
Lg :Câu 1 (1đ)
+ Mt s c ling, bn ghi, t

2 t bng mng.
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;
 tng vu:
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) Loi 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) Hin 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 cn quc sinh, mi hc sinh gm nh 
Lm tng kt dng mng. Vt
ng vu sau:
1) Nh
2)   k:
H  Nguyen Van An
Lp: TH2B
 7.4
3) Sp xp hc sinh theo tng lng ln)
4) c sinh theo tng lp
5) Loi b kht c  m tng kt <5
t s p t 
Lg: Câu 2
+ Dt (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;

+ Tc 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 gi th tp l c a hc sinh c
nh M

+ Sp xng lp, in ng l  01
(1,5 đ)
+ Loi b tt c m tng kt <5 ra kh (1 đ)
 m tng kt <5, gi s v 
b2) Loi b hc sinh  v 
b3) Lp ln khi ht v y
-  c sinh thu kin ta duyt t 
dng
-  loi b hc sinh  v c sinh t n L.count l, gim


t bng con tr.
Câu 2( 4 điểm )
Gi s m cn qu, mi  cn qu: H 
, gia ch, chc danh . Anh(ch) hla chn mt cu  li
qu  
- D li nh trong
- Thun l
- Tit ki nh nht.
Vi c lia chn. Anh(ch
1) Vit dt ca c li
2) Vit gii thut m s  
3) Hin th  
4) Loi b nhn tui v t rng nam: 60 tui; n: 55 tu 
Lg: Câu 2
1) C liu la ch ( 1 đ)
Dt
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 dng bi ng  trong u dem:= 0 ,
- S dng con tr ph M duyt t n cun  

- In bi
3) Hin th  : ( 1 đ)
S dng con tr ph M duyt t n cun  hin
th  :
4) Loi b  n tui v : ( 1 đ)

 n tui v , gi s v c tr bi p
b2) Loi b   v 
b3) Lp ln khi ht v y
-   thu kin ta duyt t p:=L 
dng
-  loi b hc sinh  v p:
a) Di chuyn con tr ph n v c p:
 M:=L;
 While M^.next <>p do M:=M^.next;
b) Bt, gt, gi
 M^.next:=p^.next;
Dispose(p);
Câu 3( 4 điểm )
Hc sinh khi 12 d thi ht hc k i ng. Mn qu

  p
1.  dng c li  
d thi. Vit dng ca c
2. c him v sau:
- Nh  u kin dp SBD = rng)
- Hin th  thi theo lp
- Loi 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) Sp xng l tng l  01
(1 đ)
c) Loi b tt c m  <5 ra kh, bit r
+ ly+ hoa+ ngoaingu)/4: (1 đ)
 m trung  <5, gi s v 
b2) Loi b hc sinh  v 
b3) Lp ln khi ht v y
 -  c sinh thu kin ta duyt t y
ng
-  loi b hc sinh  v a di chuyn con tr n v n v c
K, thc hin loi b: q^.next:=p^.next; dispose(p);
  (0.5 đ)
- Nhp s 
- Duyt t n cuy, hoc duyng.
Duy i s u
bt luy, np theo trong danh


Câu 2( 4 điểm)
Cho m c tr bi con tr n
t u d li
1) Vi
a. t phn t 
b. t phn t 
c. remove_first(loi b phn t 
d. remove_last(loi b phn t cu
2)   to ra mp cha n phn t
p t 
3) Ln t trong i ra hin 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 phn 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 )(loi b phn t  ti
phn t sau khi b loi 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)(loi b phn t cu ti
u khi loi 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 cn qu  theo mt th
t t dng cha ca mnh s dng mng. V
vii thuc  p t 

Câu 2
+ Dng cha ca mnh: (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;
 cnh th  (1 đ)
Duy nh gc(i:=1), kim tra xem cha c
nu = k, kt lu, dng gii thut, nu cha cnh ting
p lng (found = true),
hoc duyt h t luy
Câu 3( 3 điểm ) 3
Cho m ca tc con 
Anh(ch
1) Vit dn k ca mnh, s dng 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:
+ Dn k ca mnh: (1 đ)
Type Tree = ^Nut;
Nut = record
Tenthumuc: string;
Kichco:integer;
EldestChild, Nextsibling:Tree;
End;
Var T: Tree;
+ Duy t  nh tc cc (1 đ)
  (1 đ)
- Bic  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 din biu thc sau:
3*4+(12+b)/6
T u thc va dng, anh (ch
1) Vit dng con tr,
2) Vit th tc duy t c, sau
3) Vit biu thi dng tin t, hu t? nhi kt qu duy
theo th t c, sau?
Lg: Câu 3
Dựng cây: (0.5 đ)




1) Dt: (0.5 đ)
Type Tree=^nut;
Nut= record
Info: string;
Left, right: Tree;
End;
Var T: Tree;

+
*
3
4
/
+
6
12
b
 tc duy t c, sau:
Gi s  tc duy
 Th tc duy t c: (0.5 đ)
Procedure Preorder(T: Tree);
Begin
Write(T^.info);
Preorder(T^.left);
Preorder(T^.right);
End;
 Th tc duy t sau: (0.5 đ)
Procedure postorder(T: Tree);
Begin
Postorder(T^.left);
Postorder(T^.right);
Write(T^.info);
End;
2) Biu thc tin t , hu t 
c) + Biu thc tin t: (0.5 đ)
+*34/+12b6 => Biu thi kt qu duy t c
+ Biu thc hu t: (0.5 đ)
34*+12b+6/ => Biu thi kt 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 mnh (vit d
 nh)
2) D  nh c
c nh t  

Câu 3(bài làm)
1) a mnh (1 đ)
* Dt
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)? Ti ta
l m thun ln vi
kii mnh ra khi 
 th hi
Lg: Câu 3
 m (0.5 đ) a mu kin:
u kinh c i gc
u kin 2: i gnh ci
15
10

21
12
0
31
9
45
u ki
* Cc ht thun l phc tng hp xu nht
v mt thi gian O(h), viu cao c n l
 (0.5 đ)
 th hi phc tt v mt thi gian, vng
tn ti ci hong(1 đ)
Câu 1(2 điểm)
  m ca
tt.
Lg:Câu 1
 (0.5 đ)
 ros con ti mc s
i
  
 i con tr: (0.5 đ)
Type TreeBina = ^ Nut;
Nut = Record
Infor: Integer;
Left, Right: TreeBina;
End;
Var T : TreeBina;
m ca tng dt: (0.5 đ)
t bi mng:
m: - c hii d 

- vic truy cc tip, t truy c
i vi mi phn t
Hn ch: - n ta b nh
t bi con tr
m: - a b nh
Hn ch: - Truy cn t p tun t, bao gi 
gc,  truy cm
-
Câu 2(4 điểm ):Cho m   t dt
ng con tr, gc cc tr bi con tr R. Vi dt th tc
 ng vu cu sau:
1) T u kin d 
2) C 
3) Loi b 
4) m s nh hi
lG: Câu 2
+ D dng con tr: (0.5 đ)
Type TreeBSearch = ^Nut;
Nut = Record
Infor: Integer;
Left, Right: TreeBSearch;
End;
Var R : TreeBSearch;
+ T m: (1 đ)
- Vit th t
* S dng con tr ph M cha ch cn 
* Xin MT c cho M
 d liu c a ch M
* G
Nng (R = nil): R := M

Nnh v 
If (x<R^.info) then Insert (x, R^.Left)
Else if (x>R^.info) then Insert(x, R^.right);

- u kin nhng (x<>0):
 Nhp d liu mi c
 p gi th tnh m
 (1 đ)
- Nhp x
- S dng con tr ph p duyt bu t gn khi p = nil ho 
dng: Nng gii thut, Nu x< P^.Infor:
c li P => p := p^.right
 vit gii thut i d quy)
+ Loi b  (1 đ)

-  tr t
- Nnh loi b 
- Nnh loi b ng, mt con = rng
 i b, gi
- Nnh loi b   i
b t c

×