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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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  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^.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 . 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:. 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(. 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

Ngày đăng: 19/01/2015, 03:01

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan