Mô tả:
ĐẠI HỌC THÁI NGUYÊN
ĐỀ THI HẾT HỌC PHẦN
KHOA CÔNG NGHỆ THÔNG TIN
Môn thi: Cấu trúc dữ liệu và giải thuật; Hệ: Chính quy
………………
Thời gian chuẩn bị: 45 phút, không kể thời gian giao đề
Mã đề thi: 28
Câu 1( 1 điểm)
Nêu khái niệm ngăn xếp? ứng dụng ngăn xếp?
Câu 2 ( 5 điểm)
Cho một danh sách kế tiếp biểu diễn cây thư mục (directory tree), mỗi phần tử
gồm 2 thành phần: tên thư mục, vị trí của thư mục cha trên danh sách này (số
nguyên chỉ thứ tự thư mục trong danh sách). Nếu là thư mục gốc thì giá trị thứ
hai là 0. Anh (chị) hãy:
1) Viết dạng cài đặt của cây thư mục bởi danh sách kế tiếp như trên. Cho ví dụ
và minh họa bằng hình ảnh
2) Viết giải thuật đếm xem trên cây có tất cả bao nhiêu thư mục
3) Viết giải thuật xoá thư mục “Bai tap” và tất cả các thư mục con trong nó
4) Viết chương trình con hiển thị cây thư mục này ra màn hình.
Câu 3 (2 điểm)
Hãy dùng stack ở dạng liên kết đơn (cài đặt ngăn xếp bởi con trỏ) để đảo ngược vị
trí của tất cả các phần tử ở vị trí lẻ trong một DSLK đơn, có nút đầu danh sách
được trỏ bởi con trỏ L; các phần tử trong danh sách là các số nguyên
……………………Hết……………………….
Thí sinh không được sử dụng tài liệu, không ghi vào đề thi
CB coi thi không giải thích gì thêm và nộp lại đề thi cho phòng chức năng theo quy chế của bộ
Câu 1
- Ngăn xếp là một danh sách tuyến tính trong đó phép bổ sung một phần tử vào ngăn xếp
và phép loại bỏ một phần tử ra khỏi ngăn xếp đều được thực hiện ở một đầu, đầu đó gọi
là đỉnh của ngăn xếp (0.5 đ)
- Cấu trúc ngăn xếp thường được áp dụng cho những bài toán có trình tự truy xuất ngược
với trình tự lưu trữ. Ví dụ: (0.5 đ)
+ Bài toán chuyển đổi cơ số, tìm ước số chung của hai số nguyên, bài
toán tính giá trị biểu thức, ....
+ Thường áp dụng trong một số bài toá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.
.....
Câu 2
1) Dạng cài đặt, cho ví dụ và minh họa bằng hình ảnh(1.5 đ)
+ Dạng cài đặt:
Const n = ….;
Type
Nut = Record
TenThuMuc: String;
Vitri: 0..n;
End;
List = Array[1..n] of Nut;
Var T: List;
+ Ví dụ: Cho cây thư mục như sau:
1
\users \BT\
2
3
Tin\
Toan\
5
4
BT1
6
Bt2
7
Bt3
8
BT1
BT2
Hình ảnh cây thư mục trong bộ nhớ MT với các cài đặt trên như sau:
Số thứ tự
1
2
3
4
5
6
7
8
9
…
n
TenThuMuc
\users \BT\
Tin\
Toan\
BT1
Bt2
Bt3
BT1
BT2
Nil
…
nil
Vitri
0
1
1
2
2
2
3
3
0
0
2) Đếm số lượng các thư mục trên cây(1 đ)
Fuction Dem(T: List): integer;
Var i: 0..n;
Begin
i := 0;
While (T[i].TenThuMuc<>nil) do
i:=i+1;
dem:=i;
End;
3) Xóa thư mục bài tập và tất cả các thư mục con trong nó
-
(1.5 đ)
Duyệt danh sách để tìm đến thư mục bài tập, xác định số thứ tự của
thư mục này, giả sử là i. Nếu không tim thấy thì thông báo không có
thư mục để xóa, nếu tìm thấy:
a) Viết thủ tục loại bỏ thư mục con của i có vị trí là i là vị trí tìm
thấy đầu tiên
b) Lặp đi lặp lại bước a) Cho đến khi xóa hết các thư mục con có
vị trí là i
c) Xóa thư mục cha thứ i
1) Hiện cây thư mục lên màn hình
(1đ)
Duyệt danh sách từ đầu đến đêm, duyệt đến thư mục nào thì hiện thị tên và vị trí
cha của thư mục đó
Câu 3
(2 điểm)
Gợi ý cách làm:
+ Lần lượt tách các phần tử ở vị trí lẻ trong danh sách L, đưa vào trong ngăn xếp
cho đến khi duyệt hết danh sách
+ Lần lượt lấy từng phần tử trong ngăn xếp ra, gắn vào các vị trí lẻ trong danh
sách L.
- Xem thêm -