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ế 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 toán để thể hiện điều đó? Bài làm : 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 toá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 toá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 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 toá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 đó ? Bài làm: Câu 1 + “Phép đệ quy phản ánh chiến thuật “chia để trị” trong cách giải bài toán ” điều đó là đúng, nó thể hiện ở chỗ: Để giải bài toá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 toán được xử lý). Đây chính là tư tưởng của chiến thuật chia để trị (1 đ) + 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 (n1), .......(nn+1) = 1 = 1. Câu 1(bài làm) + 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 Có một trường hợp suy biến: bài toá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 Câu 3(so sánh cài đặt mảng con trỏ) ; + 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 Eles: array1..nof integer; Count: 0..n; end; Var L: list; Cài đặt bởi con trỏ: (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
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^.next:=p^.next; Dispose(p); Câu 3( 4 điểm ) Học sinh khối 12 dự thi hết học kz các môn: toán, l{, hóa, ngoại ngữ Mỗi thí sinh cần quản l{ các thông tin Số báo danh, họ tên, lớp 1 Hãy sử dụng cấu trúc dữ liệu danh sách liên kết đơn để lưu trữ các thông tin của các thí sinh dự thi Viết dạng cài đặt tương ứng của cấu trúc trên 2 Xây dựng các chương trình con thực hiện các nhiệm vụ sau: - Nhập thông tin... bên phải Điều kiện 3: Cây con bên trái và cây con bên phải đều là cây NPTK * Cấu trúc cây NPTK trước hết thuận lợi chi phép toán tìm kiếm, độ phức tạp trong trường hợp xấu nhất về mặt thời gian O(h), với h là chiều cao của cây Từ đó kéo theo các phép toán khác cũng thuận lợi như phép toán: Thêm, sửa, xóa, (0.5 đ) * Phân tích để thể hiện điều trên: Phân tích dựa vào độ phức tạp xâu nhất về mặt thời gian,... phóng p Nếu p có cả hai cây con khác rỗng: treo cây con trái vào vị trí trái nhất của cây con phải, treo cây con phải vào vị trí loại bỏ, giải phóng p + Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R): * Sử dụng con trỏ phụ M chứa địa chỉ của nút cần thêm * Xin MT cấp phát ô nhớ cho M * Đổ dữ liệu cần thêm vào ô nhớ có địa chỉ M * Gắn M vào cây: Nếu Cây rỗng (R = nil): R := M Nếu cây không rỗng:... Integer; Left, Right: TreeBSearch; End; Var R : TreeBSearch; + Tạo cây nhị phân tìm kiếm: - (1 đ) Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R): * Sử dụng con trỏ phụ M chứa địa chỉ của nút cần thêm * Xin MT cấp phát ô nhớ cho M * Đổ dữ liệu cần thêm vào ô nhớ có địa chỉ M * Gắn M vào cây: Nếu Cây rỗng (R = nil): R := M Nếu cây không rỗng: Xác định vị trí thêm M: If (x thông báo tìm thấy và dừng giải thuật, Nếu x< P^.Infor: Tìm nhánh trái p => p := p^.left,... Integer; Left, Right: TreeBSearch; End; Var R : TreeBSearch; + Tạo cây nhị phân tìm kiếm: - (1 đ) Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R): * Sử dụng con trỏ phụ M chứa địa chỉ của nút cần thêm * Xin MT cấp phát ô nhớ cho M * Đổ dữ liệu cần thêm vào ô nhớ có địa chỉ M * Gắn M vào cây: Nếu Cây rỗng (R = nil): R := M Nếu cây không rỗng: Xác định vị trí thêm M: If (x thông báo tìm thấy và dừng giải thuật, Nếu x< P^.Infor: Tìm nhánh trái p => p := p^.left,... Integer; Left, Right: TreeBSearch; End; Var R : TreeBSearch; 2) + Tạo cây nhị phân tìm kiếm: Viết thủ tục thêm một đỉnh x vào cây R: Insert(x, R): - * Sử dụng con trỏ phụ M chứa địa chỉ của nút cần thêm * Xin MT cấp phát ô nhớ cho M * Đổ dữ liệu cần thêm vào ô nhớ có địa chỉ M * Gắn M vào cây: Nếu Cây rỗng (R = nil): R := M Nếu cây không rỗng: Xác định vị trí thêm M: If (x . biu din d li li c x c g cấu trúc dữ liệu (0.5 đ) ng trong vic gii quyt my:. 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(. quyt mc? Anh (Chy m minh hu Lg: Câu 1 + Giải thuật nh cht ch nh mt s i