Tải bản đầy đủ (.docx) (20 trang)

Đề Thi Có Đap Án.docx

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 (306.84 KB, 20 trang )

Đề thi
Cấu trúc dữ liệu và giải thuật
(Có đáp án)


Đại Học Công Nghệ Thông Tin.
Đại Học Thái Nguyên.
Đề 1
Câu 1(2 điểm)
Thế nào là giải thuật; cấu trúc dữ liệu, mối quan hệ giữa chúng? Hãy nêu một vài cấu trúc dữ
liệu tiền định của ngơn ngữ lập trình mà anh (chị) biết?
Câu 2(5 điểm)
Giả sử cần quản lý một lớp học bao gồm các sinh viên. Mỗi sinh viên gồm các thông tin sau:
Họ Tên, Lớp, Số báo danh, Điểm trung bình. Anh (chị) hãy:
1) Viết dạng cài đặt danh sách này bằng cấu trúc danh sách liên kết đơn,
2) Với cấu trúc danh sách đã cài đặt, viết các chương trình con thực hiện các yêu cầu như sau:
a)

Nhập vào danh sách gồm n sinh viên

b)

Loại bỏ khỏi danh sách những sinh viên có điểm trung bình < 5

c)

Sắp xếp danh sách theo trường lớp tăng dần

d)

In ra màn hình danh sách sinh viên theo từng



lớp (n là một số nguyên dương tự nhập từ bàn phím)
Câu 3(1 điểm)
Anh (Chị) hãy nêu ưu nhược điểm của cách cài đặt danh sách bởi danh sách liên kết đơn?
Câu 1
+ Giải thuật là một dãy các câu lệnh chặt chẽ và rõ ràng, xác định một dãy các thao tác trên một
số đối tượng nào(dữ liệu) đó sao cho sau một số hữu hạn bước thực hiện ta đạt được kết quả mong
muốn (0.5 đ)
+ Cách thức tổ chức biểu diễn dữ liệu mà theo đó dữ liệu được lưu trữ và được xử lý trong
MTĐT, được gọi là cấu trúc dữ liệu (0.5 đ)
+ Mối quan hệ giữa cấu trúc dữ liệu và giải thuật: Giải thuật tác động trên dữ liệu lưu trữ trong
các cấu trúc để cho ra kết quả mong muốn. Trong lập trình, chúng quan hệ với nhau theo ràng buộc
sau:
Giải thuật + cấu trúc dữ liệu = chương trình (0.5 đ)


+ Một vài cấu trúc dữ liệu của ngôn ngữ lập trình: Mảng, bản ghi, xâu ký tự, tệp tin …..
(0.5 đ)
Câu 2
*) Dạng cài đặt danh sách (1 đ)
Type Sinhvien =

record

`

end;

List = ^Sinhvien;
Var L: List;

*) Viết giải thuật

Hoten: String;
Lớp : String;
SoBD: String;
ĐTB: real;
Next: ^ Sinhvien;

1) Nhập danh sách gồm n sinh viên (1 đ)
+ Nhập số lượng sinh viên hiện có n: readln(n);
+ Sử dụng vịng lăp i chạy từ 1 -> n, mỗi lần lặp nhập 1 sinh viên và gắn vào danh sách:
for i:=1 to n do
begin
- new(M); {yêu cầu MT cấp phát ô nhớ chứa dữ liệu của sinh viên cần
nhập

}

- Nhập các thông tin về sinh viên, lưu vào ô nhớ được trỏ bởi M
- Gắn kết ô nhớ được trỏ bởi M vào danh sách
end;
2) Loại bỏ những SV có điểm trung bình <5

(1 đ)

Kiểm tra xem danh sách L có rỗng hay khơng? Nếu rỗng trở về chương trình chính, nếu khơng
rỗng thực hiện loại bỏ như sau:
-

Sử dụng con trỏ phụ q duyệt tử đầu đến cuối danh sách, nếu q^.dtb <5 thì gọi thủ

tục loại bỏ phần tử được trỏ bởi q trong danh sách

-

Viết thủ tục loại bỏ phần tử được trỏ bởi con trỏ q trong danh sách L:
a) Giả sử đã biết vị trí con trỏ q
b) Sử dụng con trỏ phụ p di chuyển đến vị trí trước
q: P:= L;
While p^.next<> q do p:= p^.next;


c) Loại bỏ phần tử ở vị trí q:
p^.next := q^.next;
dispose(q);
q:= p^.next;// lưu vị trí tiếp theo vị trí loại bỏ để còn loại bỏ tiếp
3) Sắp xếp danh sách theo trường lớp tăng dần

(1 đ)

Có thể sử dụng một trong các thuật toán sắp xếp để sắp xếp dữ liệu trên danh sách liên
kết, ở đây ta sử dụng giải thuật sắp xếp chọn trực tiếp (selection sort) và sử dụng cách tiếp
cận:giữ nguyên mối liên kết của các nút trong danh sách và hoán vị nội dung của các nút:
Giải thuật:
Procedure ListSelection_Sort(var L: List)
Var p, q, min: List;
Begin
p:=L;
While (p<>nil) do
Begin
q:=p^.next;

min:=p;
While (q<>nil) do
Begin
If (q^.inforq:=q^.next;
End;
Hoanvi(min^.infor,p^.infor);
P:=P^.next;
End;
End;
4) Hiển thị danh sách sinh viên theo từng lớp: Sử dụng con trỏ M duyệt tử đầu đến cuối
danh sách đã được sắp theo lớp ở câu 3, duyệt đến sinh viên nào thì hiển thị các thơng tin về sinh
viên đó:
(1 đ)
M: = L; p:=M;
writeln(‘Các sinh vien lop M^.lop la:’);
While (M<> nil) do
Begin
Write(M^. hoten);
Write(M^. Lop);
Write(M^. sbd);
P:=M;
M := M^.next;


Câu 3
Ưu điểm:

If (M^.lop<>p^.lop) then writeln(‘Các sinh vien lop M^.lop la:’);


End;
(0.5 đ)
-

Khơng gây hiện tượng lãng phí bộ nhớ (Hiện tượng giữ chỗ để đấy mà không
dùng đến như danh sách cài đặt bởi mảng)

-

Cấu trúc dữ liệu danh sách cài đặt bởi con trỏ còn gọi là cấu trúc dũ liệu động,
không gian bộ nhớ được cấp phát trong heap, do đó nó khơng bị giới hạn bởi kích
thước 64kb như đối với cấu trúc dữ liệu tĩnh

-

Các phần tử trong danh sách nằm ở những vị trí dải dác, do đó tận dụng được
những khơng gian trống này, mà không cần một vùng nhớ kế tiếp như cài đặt bởi
mảng

Nhược điểm: (0.5 đ)
-

Tốc độ truy cập đến các phần tử trong danh sách là chậm, không đồng đều đối với
mọi phần tử (truy cập tuần tự một chiều)

-

Từ phần tử sau không truy cập ngược đến các phần tử đứng trước nó được

-


mỗi phần tử trong danh sách tốn thêm một ơ nhớ có kích cỡ là 4byte để lưu địa
chỉ của phần tử đứng sau nó trong danh sách


Đề 2
Câu 1(3 điểm)
1)

Thế nào là cấu trúc dữ liệu tiền định (định sẵn) của ngơn ngữ lập trình bậc cao?

2)

Hãy nêu một vài cấu trúc dữ liệu tiền định của ngơn ngữ lập trình mà anh (chị) biết?

3)

Tại sao chỉ sử dụng các cấu trúc dữ liệu tiền định không đủ đáp ứng yêu cầu về việc tổ
chức, lưu trữ dữ liệu của mọi bài toán ứng dụng thực tế?. Một số bài toán ứng dụng
phải cần sử dụng đến các cấu trúc dữ liệu do người lập trình tự định nghĩa? Hãy nêu
một bài toán ứng dụng như vậy, phân tích bài tốn để thể hiện điều đó?

Câu 2(3 điểm)
Giả sử ta cần quản lý một ngăn xếp chứa các số nguyên. Viết dạng cài đặt của cấu trúc ngăn
xếp này bằng mảng. Với cấu trúc ngăn xếp vừa cài đặt, hãy viết thủ tục thêm phần tử x vào
vị trí thứ k kể tử đỉnh ngăn xếp sao cho các phần tử khác không thay đổi thứ tự (k là số
nguyên nhập từ bàn phím).
Câu 3(2 điểm)
Anh (Chị) hãy nêu một lớp bài toán mà sử dụng cấu trúc ngăn xếp rất thích hợp cho việc giải
quyết các u cầu của bài tốn? phân tích bài tốn đã nêu để thể hiện rõ điều đó?

Câu 1
1) Cấu trúc dữ liệu tiền định của ngơn ngữ lập trình bậc cao là các cấu trúc dữ liệu đã được định nghĩa
sẵn trong ngơn ngữ lập trình đó, người lập trình chỉ việc sử dụng mà khơng cần định nghĩa lại

(1 đ)

3) Một vài cấu trúc dữ liệu tiền định như: mảng, bản ghi, tệp tin,........(1 đ)
2) Các cấu trúc dữ liệu tiền định có sẵn trong ngơn ngữ lập trình khơng đáp ứng đầy đủ được nhu cầu
lưu trữ dữ liệu lớn của mọi chương trình, khơng phản ánh đầy đủ bản chất của các đối tượng dữ liệu có
trong thực tế = > người ta cần đến các cấu trúc dữ liệu do người lập trình tự định nghĩa.

(0.5

đ)
Ví dụ: Xét bài tốn quản lý hồ sơ sinh viên trong một khoa, các yêu cầu quản lý hồ sơ là: Thêm, sửa,
xóa, tìm kiếm,.......hồ sơ.=> Sử dụng cấu trúc dữ liệu mảng (cấu trúc tiền định)để lưu các thơng tin về
hồ sơ là khơng phù hợp vì: cấu trúc mảng khơng cho phép thực hiện phép tốn thêm, xóa, khơng gian
khơng đủ để lưu trữ tất cả hồ sơ nếu số lượng hồ sơ thực tế lớn,…. .(0.5 đ)
Câu 2
+ Dạng cài đặt ngăn xếp sử dụng mảng:

(1 đ)

const n = <số phần tử tối đa trong ngăn xếp>;
type Stack = Record


Top: 0..n ;
Element : array [1.. n] of integer;


End;
+ Thêm phần tử x vào ngăn xếp S ở vị trí thứ k tính từ đỉnh ngăn xếp: (2 đ)

Kiểm tra xem ngăn xếp có rỗng khơng, nểu rỗng thì thêm vào đỉnh ngăn xếp, Nếu ngăn xếp
không rỗng: Kiểm tra xem số k nhập vào có > top hay khơng? Nếu lớn hơn thì thêm x vào đỉnh ngăn
xếp, nếu không: Lấy (top-k+1) phần tử kể từ đầu ngăn xếp ra một ngăn xếp phụ, thêm phần tử phần tử
x vào ngăn xếp, đổ (top – k+1) phần tử từ ngăn xếp phụ vào ngăn xếp ban đầu do đó đảm bảo không
thay đổi trật tự các phần tử trong ngăn xếp ban đầu sau khi loại bỏ phần tử ở vị trí k.(thủ tục tương
ứng tự viết)
Câu 3
(1 đ)
- Cấu trúc ngăn xếp thường được áp dụng cho những bài tốn có trình tự truy xuất ngược với trình tự
lưu trữ. Ví dụ:
+ Bài tốn chuyển đổi cơ số, tìm ước số chung của hai số ngun, bài tốn tính giá
trị biểu thức, ....
+ Thường áp dụng trong một số bài tốn tìm đường đi trong lý thuyết đồ thị (lưu vết
đường đi)
+ làm môi trường lưu trữ các biến toàn cục và cục bộ của các thủ tục trong chương
trình dịch của ngơn ngữ lập trình.
(1 đ)
- Phân tích cách giải các bài tốn trên để thể hiện rõ điều đã nêu


Đề 3
Câu 1(2 điểm)
Có người nói: “Phép đệ quy phản ánh chiến thuật “chia để trị” trong cách giải bài tốn ”. Điều
đó có đúng khơng? anh (chị) hãy giải thích và cho ví dụ minh họa cho điều đó?
Câu 2(3 điểm)
Giả sử cần quản lý một cây chứa các số nguyên, các đỉnh trên cây được đánh số theo một thứ
tự nào đó. Hãy viết dạng cài đặt cây bằng cha của mỗi đỉnh sử dụng mảng. Với cách cài đặt

này, viết các giải thuật tìm con cả, tìm cha của đỉnh k cho trước (k là số nguyên nhập từ bàn
phím)
Câu 3(3 điểm)
Cho một cây thư mục T và kích cỡ của từng thư mục con trong máy tính như sau:
1 KB
\users \BT\
2 KB
Tin\
8 KB
BT

1KB
Toan\

10 kB

6 KB
Bt

Bt

9KB
BT1

10 kB
BT2

Anh(chị) hãy:
1) Viết dạng cài đặt cây bằng con trưởng và em liền kề của mỗi đỉnh, sử dụng con trỏ
2) Để tính tổng kích thước của tồn bộ cây thư mục trên thì ta duyệt cây theo thứ tự nào?

3) Mơ tả cách tính tổng kích thước cây thư mục?

Câu 1
+ “Phép đệ quy phản ánh chiến thuật “chia để trị” trong cách giải bài tốn ” điều đó là đúng, nó thể
hiện ở chỗ: Để giải bài tốn với số lượng dữ liệu đầu vào lớn, ta giải bài toán với số lượng dữ liệu đầu
vào nhỏ hơn, và nhỏ hơn nữa, cứ thế gọi đệ quy cho đến gọi đến trường hợp bài toán xảy ra suy biến
(trường hợp này bài tốn được xử lý). Đây chính là tư tưởng của chiến thuật chia để trị
+ Ví dụ: (1 đ)
Chạy chậm một giải thuật đệ quy, ví dụ tính n ! :
Để tính n! Ta tính (n-1)!,........(n-n+1) = 1! = 1.(vẽ hình minh họa)

(1 đ)


Câu 2
+ Dạng cài đặt cây bằng cha của mỗi đỉ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;
+ Tìm cha của đỉnh thứ k:

(1 đ)


parent (T, k) := T[k].parent;
+ Tìm con cả của đỉnh thứ k trên cây T

(1 đ)

Duyệt các đỉnh trên cây T, xuất phát từ đỉnh gốc(i:=1), kiểm tra xem cha của đỉnh i có = k
khơng, nếu = k, kết luận i là con cả, dừng giải thuật, nếu cha của i <>k thì duyệt đỉnh tiếp theo trên cây
T bằng cách cho i:= i+1. Lặp đi lặp lại phép duyệt các đỉnh trên T cho đến khi tìm thấy thì dừng (found
= true), hoặc duyệt hết các đỉnh trên T (i>n với n là số đỉnh trên cây) thì cũng dừng và kết luận không
tim thấy
Câu 3
+ Dạng cài đặt cây bằng con trưởng và em liền kề của mỗi đỉnh:
Type

Tree
Nut

Var T: Tree;

=
=

(1 đ)

^Nut;
record

End;

Tenthumuc: string;

Kichco:integer;
EldestChild, Nextsibling:Tree;

+ Duyệt cây theo thứ tự sau để xác định tổng kích thước của cây thư mục (1 đ)
+ Mơ tả cách tính tổng kích thước cây thư mục T trên:

(1 đ)

-

Biến: tong:= 0; {tong lưu tổng kích thước tồn bộ cây thư mục}

-

Procedure postOder(T : tree, var tong:integer);
Var C: tree;
Begin
if (T=nil) then exit;
else
begin


End;

end;

C:=t^.eldestChild;
postOrder(C);
C:=C^.nextsibling;
While (C<>nil) do

Begin
postOrder(C);
C:= C^.nextsibling;
End;
Tong:=tong+T^.kichco;


Đề 4
Câu 1(2 điểm)
Trình bày các đặc điểm của giải thuật đệ quy. Hàm đệ quy (viết bằng ngôn ngữ pascal) dưới
đây cho kết quả là gì? Giải thích tại sao?
Function Tinh(n,x: byte): Longint;
Begin
If n = 1 then Tinh := x
Else Tinh := n* Tinh(n-1,x);
End;
Câu 2(4 điểm)
Giả sử một đơn vị cần quản lý các cán bộ, mỗi cán bộ cần quản lý các thuộc tính sau: Họ tên,
năm sinh, giới tính, địa chỉ, trình độ, chức danh . Anh(chị) hãy lựa chọn một cấu trúc dữ liệu để
quản lý các thông tin của các cán bộ trong đơn vị đó, sao cho:
-

Dữ liệu được lưu trong bộ nhớ trong

-

Thuận lợi cho các phép tốn: thêm, xóa cán bộ

-


Tiết kiệm không gian bộ nhớ nhất.

Với cấu trúc dữ liệu mà anh(chị) đã lựa chọn. Anh(chị) hãy:
1) Viết dạng cài đặt của cấu trúc dữ liệu đó
2) Viết giải thuật đếm số lượng cán bộ trong đơn vị
3) Hiển thị thông tin của các cán bộ trong đơn vị
4) Loại bỏ những người đến tuổi về hưu (biết rằng nam: 60 tuối; nữ: 55 tuổi thì về hưu)
Câu 3(2 điểm)
Nêu khái niệm danh sách? các cách cài đặt danh sách bởi mảng, bởi danh sách liên kết đơn?
ưu nhược điểm của từng dạng cài đặt?
Câu 1
+ Ba đặc điểm của giải thuật đệ quy:

(1 đ)

-

Trong giải thuật đệ quy bao giờ cũng có lời gọi đến chính nó

-

Sau mỗi lời gọi đệ quy, kích thước của bài tốn được thu nhỏ hơn trước

-

Có một trường hợp suy biến: bài tốn được giải quyết theo một cách khác hẳn và
giải thuật cũng kết thúc

+ Kết quả của hàm đệ quy là: x*n!, vì:


(1 đ)


n = 1 cho kết quả là: 1*x
n = 2 cho kết quả là: 1*2*x
n = 3 cho kết quả là: 1*2*3*x
..........
n = n cho kết quả là: 1*2*3*.......*n*x = n! * x
Câu 2
1) Cấu trúc dữ liệu lựa chọn là danh sách liên kết đơn

(1 đ)

Dạng cài đặ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ố lượng cán bộ trong trong danh sách

(1 đ)


- Sử dụng biến đếm lưu số lượng cán bộ trong đơn vị, ban đầu dem:= 0 ,
- Sử dụng con trỏ phụ M duyệt từ đầu đến cuối danh sách, duyệt đến cán bộ nào thì tăng
biến đếm lên 1:
- In biến đếm ra màn hình
3) Hiển thị các cán bộ trong đơn vị: (1 đ)
Sử dụng con trỏ phụ M duyệt từ đầu đến cuối danh sách, duyệt đến cán bộ nào thì hiển
thị các thơng tin của cán bộ đó lên màn hình:
4) Loại bỏ các cán bộ đến tuổi về hưu trong đơn vị:

(1 đ)

Cách làm:
b1) Tìm cán bộ đầu tiên trong danh sách đến tuổi về hưu, giả sử vị trí được trỏ bởi p
b2) Loại bỏ cán bộ ở vị trí p


b3) Lặp đi lặp lại b1); b2) cho đến khi hết vị trí tìm thấy
Chú ý: - để tìm cán bộ thỏa mãn điều kiện ta duyệt từ đầu danh sách p:=L đến khi tìm thấy thì
dừng
-

để loại bỏ học sinh ở vị trí p:
a) Di chuyển con trỏ phụ M đến vị trí trước p:
 M:=L;
 While M^.next <>p do M:=M^.next;
b) Bứt liên kết, gắn liên kết, giải phóng p:
 M^.next:=p^.next;
 Dispose(p);

Câu 3

+ Danh sách là một cấu trúc dùng để lưu trữ một tập hợp hữu hạn biến động các phần tử thuộc
cùng một lớp đối tượng nào đó

(0.5 đ)

+ Có thể cài đặt danh sách bởi mảng và bởi con trỏ, tương ứng ta có danh sách kế tiếp và danh
sách móc nối (danh sách liên kết). Các dạng cài đặt tương ứng:
Cài đặt bởi mảng:

( 0.5 đ)
Const n=maxlist;
Type list =
record

Var L: list;
Cài đặt bởi con trỏ:

end;

Eles: array[1..n]of integer;
Count: 0..n;

(0.5 đ)

type list=^nut;
nut = record
infor: item;
next:list;
end;
var l,f:pqueue;

+ Ví dụ để quản lý sinh viên, cán bộ ta có danh sách sinh viên, danh sách cán bộ….
Ưu nhược điểm của từng các cài đặt danh sách: (0.5 đ)


a) Danh sách cài bởi mảng
Ưu điểm
i. truy cấp đến các phần tử là trực tiếp do đó nhanh và đồng đều đối với mọi phần
tử
ii. Các thao tác thực hiện tương đối dễ dàng
Nhược điểm
iii. Có hiện tượng dư thừa bộ nhớ: Hiện tượng giữ chỗ để đấy mà không dùng tới
iv. Bị hạn chế bởi không gian kế tiếp trong bộ nhớ
v. Là cấu trúc dữ liệu tĩnh, bị giới hạn không gian bộ nhớ trong thanh ghi dữ liệu và
thanh ghi stack
vi. có hiện tượng co giãn, dịch chuyển các phần tử khi thực hiện thao tác bổ sung
phần tử, hoặc loại bỏ phần tử, do đó là số lượng phép tính trong giải thuật tăng=
> độ phức tạp tính tốn cũnh tăng theo
b) Danh sách cài đặt bởi con trỏ
Ưu điểm:
- Không gây hiện tượng lãng phí bộ nhớ (Hiện tượng giữ chỗ để đấy mà không
dùng đến như danh sách cài đặt bởi mảng)
- Cấu trúc dữ liệu danh sách cài đặt bởi con trỏ cịn gọi là cấu trúc dũ liệu động,
khơng gian bộ nhớ được cấp phát trong heap, do đó nó khơng bị giới hạn bởi kích
thước 64kb như đối với cấu trúc dữ liệu tĩnh
- Các phần tử trong danh sách nằm ở những vị trí dải dác, do đó tận dụng được
những không gian trống này, mà không cần một vùng nhớ kế tiếp như cài đặt bởi
mảng
Nhược điểm:
- Tốc độ truy cập đến các phần tử trong danh sách là chậm, không đồng đều đối với
mọi phần tử (truy cập tuần tự một chiều)

- Từ phần tử trước không truy cập ngược lại phần tử đứng trước
- mỗi phần tử trong danh sách tốn thêm một không gian là 4byte để lưu địa chỉ của
phàn tử đứng sau nó trong danh sách


Đề 5
Câu 1(2 điểm)
Trình bày các đặc điểm của giải thuật đệ quy. Giả sử a và b là những số nguyên dương, Q là
hàm số của a và b, được định nghĩa như sau:
0 nếu aQ(a-b, b)+1 nếu a>=b
Hãy tính Q(2,3) và Q(14,3)
Q(a,b) =

{

Câu 2(3 điểm)
Giả sử cần quản lý một danh sách các số nguyên. Hãy viết dạng cài đặt danh sách này bằng
mảng, với cấu trúc danh sách đã cài đặt, viết các chương trình con thực hiện các u cầu như
sau:
1) Tính trung bình cộng của các số lưu trong danh sách
2) Loại bỏ ra khỏi danh sách số 3 đầu tiên tìm thấy trong danh sách
3) Hiển thị danh sách lên màn hình
Câu 3(3 điểm)
Hãy vẽ cây nhị phân biểu diễn biểu thức toán học sau:
3*4+(12+b)/6
Từ cây biểu thức vừa dựng, anh (chị) hãy:
1) Viết dạng cài đặt cây bằng con trỏ,
2)


Viết thủ tục duyệt cây theo thứ tự trước, sau

3) Viết biểu thức toán học trên dưới dạng tiền tố, hậu tố? nhận xét với kết quả duyệt cây theo
thứ tự trước, sau?
Câu 1
+ Ba đặc điểm của giải thuật đệ quy: (1 đ)
-

Trong giải thuật đệ quy bao giờ cũng có lời gọi đến chính nó

-

Sau mỗi lời gọi đệ quy, kích thước của bài toán được thu nhỏ hơn trước

-

Bao giờ cũng có một trường hợp suy biến (trường hợp đặc biệt để đãm bảo tính
dừng của giải thuật): bài tốn được giải quyết theo một cách khác hẳn và giải
thuật cũng kết thúc

+ Tính : Q(2,3) =0; Q(14, 5) = 2

(1 đ)


Câu 2
+ Dạng cài đặt danh sách bởi mảng:

(0.5 đ)


Const n=maxlist;
Type list =
record

Var L: list;

end;

Ele: array[1..n]of integer;
Count: 0..n;

+ Các thủ tục tương ứng với các u cầu:
1) Tính trung bình cộng của các số lưu trong danh sách

(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ố 3 đầu tiên tìm thấy trong danh sách (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ị danh sách lên màn hình (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 3
Dựng cây:

(0.5 đ)

*
3

1) Dạng cài đặt:

/
4


+
12

(0.5 đ)

6
b

Type Tree=^nut;
Nut= record

Var T: Tree;

End;

Info: string;
Left, right: Tree;

2) Các thủ tục duyệt cây theo thứ tự trước,
sau: Giả sử xét cây gốc T, các thủ tục duyệt
cây T
 Thủ tục duyệt cây theo thứ tự trước:

(0.5 đ)

Procedure Preorder(T: Tree);
Begin
Write(T^.info);
Preorder(T^.left);
Preorder(T^.right);

End;
 Thủ tục duyệt cây T theo thứ 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ố và nhận xét:
c) + Biểu thức tiền tố:

(0.5 đ)


+*34/+12b6 => Biểu thức trùng với kết quả duyệt cây theo thứ tự trước
+ Biểu thức hậu tố:

(0.5 đ)

34*+12b+6/ => Biểu thức trùng với kết quả duyệt cây theo thứ tự sau

Đề 6
Câu 1(2điểm)
Nêu khái niệm hàng đợi? các cách cài đặt hàng đợi bởi mảng, con trỏ? ưu nhược điểm của từng
dạng cài đặt?
Câu 2(5 điểm)
Giả sử ta cần quản lý một danh sách học sinh, mỗi học sinh gồm những thông tin sau: Họ tên,

Lớp, Điểm tổng kết, xếp loại học lực . Anh(chị) hãy:
1) Viết dạng cài đặt danh sách trên bằng danh sách liên kết kép.
2) Với cách cài đặt này, viết các chương trình con tương ứng với các yêu cầu sau:
a) Tạo danh sách có n học sinh, (n là số nguyên dương nhập từ bàn phím)
b) Đếm xem trong danh sách có bao nhiêu sinh viên học lớp “CĐ2C”.
c) Hãy xếp loại học lực cho các sinh viên trong danh sách theo các tiêu chí sau:
+ Nếu: Điểm tổng kết< 5: Xếp loại yếu
+ Nếu : 5 ≤ Điểm tổng kết ≤6: Xếp loại trung bình
+ Nếu : 6< Điểm tổng kết <8 : Xếp loại khá
+ Nếu : Điểm tổng kết ≥8: Xếp loại giỏi
d) Sắp sếp danh sách theo trường lớp tăng dần
e) In ra màn hình danh sách sinh viên theo từng lớp,
Câu 3(1 điểm)
Anh (Chị) hãy nêu một lớp bài toán ứng dụng mà sử dụng cấu trúc dữ liệu hàng đợi giúp việc
giải quyết yêu cầu bài toán được thuận lợi hơn? phân tích bài tốn đã nêu để thể hiện rõ điều
đó?
Câu 1
- Hàng đợi là một danh sách tuyến tính trong đó phép bổ sung một phần tử vào hàng đợi được
thực hiện ở một đầu (đầu này được gọi là lối sau - Real), còn phép lấy một phần tử ra khỏi hàng
đợi được thực hiện ở đầu kia (lối trước - Front) (0.5 đ)
- Hai phương pháp cài đặt hàng đợi:
Cài đặt bởi mảng:

(0.5 đ)
const n=maxqueue;
type queue= record

ele:array[1..n]of item;
L,F,count:0..n;



end;
Ưu điểm:
- truy cập nhanh, trực tiếp đến mọi phần tử
- Các thao tác dễ thực hiện
Nhược điểm:
-

Gây hiện tượng lãng phí bộ nhớ, hiện tượng này cịn được gọi là giữ chỗ để đấy
mà không dùng đến

-

Bị giới hạn bởi không gian trống kế tiếp trong bộ nhớ

-

Cấu trúc là cấu trúc tĩnh, không gian nhớ được cấp phát trong thanh ghi data, hoặc
thanh ghi stack

Cài đặt bởi con trỏ:

(0.5 đ)
type pqueue=^nut;
nut= record
infor: item;
next:pqueue;
end;
var l,f:pqueue;


Ưu điểm:
-

khơng có hiện tựợng giữ chỗ để đấy nên khơng gây lãng phí bộ nhớ

-

Cấu trúc mang tính động, khơng gian nhớ cấp phát cho hàng đợi là không gian
động, được cấp phát trong heap

-

Không bị hạn chế bởi không gian trống kế tiép trong bộ nhớ, các phần tử trong
hàng đợi có thể nằm ở những vị trí khác nhau tong bộ nhớ, khơng nhất thiết phải
là những vị trí kế tiếp

Nhược điểm:
-

Mỗi nút trong hàng đợi tốn thêm một vùng nhớ chứa con trỏ

Ưu nhược điểm của từng dạng cài đặt: (0.5 đ)

:Câu 2
+ Dạng cài đặt:

(0.5 đ)

Type Hocsinh =


record


Hoten: String;
Lớp : String;
DiemTK: float;
xeploai: string;
`

Lptr, Rptr: ^ Hocsinh;
end;
DoubleList = ^Hocsinh;
Var L, R: DoubleList;

+ Tạo danh sách gồm n học sinh:

(1 đ)

procedure taoDS(var L,R:doublelist);
var M: doublelist;
begin
L:=R:=nil; {khoi tao danh sach rong}
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,,L, R);

end;
end;
trong đó thủ tục insert(M,L,R): chèn học sinh được trỏ bởi M vào cuối danh sách:
procedure Insert(M: doublelist, Var L, R: DoubleList);
Var
Begin
if (L=nil)and(R=nil) then



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×