đề 5

Màu nền
Font chữ
Font size
Chiều cao dòng

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

begin

M^.Lptr:=nil; M^.Rptr:=nil;

L:=M; R:=M;

end

else

begin

R^.Rptr:=M; M^.Lptr:=R; M^.Rptr:=nil; R:=M;

end;

End;

+ Đếm xem có bao nhiêu học sinh học lớp "CD2C": (1 đ)

- Sử dụng biến đếm, ban đầu = 0 , đếm số người học lớp "CD2C"

- Sử dụng con trỏ phụ M duyệt từ đầu đến cuối danh sách, sinh nào có: M^.lop = "CD2C" thì tăng biến đếm lên 1:

- In biến đếm ra màn hình

+ Xếp loại học lực: (1 đ)

- Sử dụng con trỏ p duyệt từ học sinh đầu tiên đến học sinh cuối cùng trong danh sách. Duyệt đến học sinh nào thì xếp loại học lực cho học sinh đó theo tiêu chí đã cho của đề bài sử dụngc câu lệnh if hoặc câu lệnh case .....of

+ 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^.infor<min^.infor) then min:=q;

q:=q^.next;

End;

Hoanvi(min^.infor,p^.infor);

P:=P^.next;

End;

End;

+ 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 đó: (0.5 đ)

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;

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

End;

Câu 3

- Bài toán tính biểu thức tiền tố, lưu vết đường đi trên đồ thị, khử đệ quy, ......

(0.5 đ)

- Phân tích bài toán : (0.5 đ)

Bạn đang đọc truyện trên: Truyen2U.Pro