Bài tập Cấu trúc dữ liệu - Giải bằng Passcal

THỰC HIỆN CỘNG 1 VÀO DÃY SỐ NHỊ PHÂN

Type

b=0.1;

Position=^Cell;

Cell=Record

bit:0.1;

next:Position;

end;

Procedure INCREMENT(Var Bnumber: Position; Q: Position);

Var K,P: position;

Begin

P:=Bnumber;

while P^.next<>Q do P:=P^.next;

if P=Bnumber then

begin

new(K); K^.bit:=1;

K^.next:=bnumber^.next;

Bnumber^.next:=k;

 

doc8 trang | Chia sẻ: netpro | Lượt xem: 2475 | Lượt tải: 2download
Bạn đang xem nội dung tài liệu Bài tập Cấu trúc dữ liệu - Giải bằng Passcal, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
BÀI TẬP CẤU TRÚC DỮ LIỆU BÀI 1_3. {---------------TRON 2 DANH SACH ----------} Procedure MergerList(L1,L2:List;Var L:List); Var Q,P,T: List; Begin sapxep(L1); sapxep(L2); P:=first(L1); { CACH 1: while Pend_L(L1) do begin insert_L(retrieve(P,L1),End_L(L),L); P:=P^.next; end; Q:=L2; while Qend_L(L2) do begin T:=first(L); while (Tnil) and (retrieve(T,L)<retrieve(Q,L2)) do T:=T^.next; insert_L(retrieve(Q,L2),T,L); Q:=Q^.next; end; } P:=First(L1);q:=FIRST(L2); while (PEnd_L(L1)) and (QEnd_L(L2)) do if retrieve(P,L1)<Retrieve(Q,L2) then begin insert_L(retrieve(P,L1),End_L(L),L); P:=P^.next; end else begin insert_L(retrieve(Q,L2),End_L(L),L); Q:=Q^.next; end ; while Pend_L(L1) do begin insert_L(retrieve(P,L1),End_L(L),L); P:=P^.next; end; while Qend_L(L2) do begin insert_L(retrieve(Q,L2),End_L(L),L); Q:=Q^.next; end; End; {---------------TRON 2 DANH SACH ----------} Procedure MergerList(L2:List;Var L1:List); Var Q,P,T: List; Begin Q:=first(L2); while Qend_L(L2) do begin T:= L1^.next; while (Tnil) and (retrieve(T,L1)<retrieve(Q,L2)) do T:=T^.next; insert_L(retrieve(Q,L2),T,P); Q:=Q^.next; end; End; {--------TRON N DANH SACH ---------} Procedure Merger_nl(N_List:mang; m: integer; Var L:List); Var i:integer; Begin L:=N_List[1]; for i:=2 to m do mergerlist(N_List[i],L); End; {-------- NHAP N DANH SACH -------} Procedure READ_NL(Var N_List:mang); Var j:integer; Begin write('Co bao nhieu danh sach can tron: ');readln(m); for j:=1 to m do begin makenull(N_List[j]); writeln('------- DANH SACH THU ',j,' ------'); readlist(N_List[j]); sapxep(N_List[j]); WRITELN; end; End; BÀI 1_5: uses crt; Type Elementype=integer; Position=^List; List=record heso,somu:elementype; next:Position; end; Var A, B, C: position; {--------THEM PHAN TU VAO DA THUC --------------} Procedure Insert(c,e:elementype; Var A: position); Var Q,P:position; Begin new(P);p^.heso:=c;P^.somu:=e;P^.next:=nil; {tao nut tam} Q:=A; while (Q^.nextnil) and (Q^.next^.somu>e) do Q:=Q^.next; If Q^.next=nil then Q^.next:=P else if Q^.next^.somu=e then Q^.next^.heso:=Q^.next^.heso+C else begin P^.next:=Q^.next; Q^.next:=P; end; End; {---------- NHAN DA THUC -----------} Procedure Add(D1,D2: position; Var P:position); Var p1, p2: Position;x,y:elementype; Begin p1:=first(D1);p2:=first(D2); makenull(P); while (P1end_L(D1)) and (P2end_L(D2)) do if p1^.next^.somu>P2^.next^.somu then begin insert(P1^.next^.heso,P1^.next^.somu,P); P1:=P1^.next; end else if p1^.next^.somu<P2^.next^.somu then begin insert(P2^.next^.heso,P2^.next^.somu,P); P2:=P2^.next; end else begin x:=P1^.next^.heso+P2^.next^.heso; y:=P1^.next^.somu; insert(x,y,P); P1:=P1^.next;P2:=P2^.next; end; while P1end_L(D1) do begin insert(P1^.next^.heso,P1^.next^.somu,P); P1:=P1^.next; end; while P2end_L(D2) do begin insert(P2^.next^.heso,P2^.next^.somu,P); P2:=P2^.next; end; End ; {--------- TINH TONG HAI DA THUC ----------} Procedure SUM_DT(A, B: Position; Var C: Position); Var T, K : Position; Begin makenull(C); T:=A; while T^.nextnil do begin insert(T^.next^.heso,T^.next^.somu,C); T:=T^.next; end; K:=B; while K^.nextnil do begin insert(K^.next^.heso,K^.next^.somu,C); K:=K^.next; end; End; {---------- NHAN HAI DA THUC ------------} Procedure Nhan_DT(A: Position; B: Position; Var C: Position); Var T1,T2: Position; D:Position;mu,he:elementype; Begin T1:=first(A);makenull(C); While T1end_l(T1) do begin makenull(D); T2:=first(B); while T2end_l(T2) do begin he:=T1^.next^.heso*T2^.next^.heso ; mu:=T1^.next^.somu+T2^.next^.somu; insert(he,mu,D); T2:=T2^.next; end; add(D,C,C); T1:=T1^.next; end; End; {----------DAO HAM CUA DA THUC ----------} Function DaoHam(A: Position):Position; Var K, P, Q: Position; Begin makenull(K); P:=K; Q:=A; while Q^.nextnil do begin new(P^.next); P^.next^.heso:=Q^.next^.heso*Q^.next^.heso; P^.next^.somu:=Q^.next^.somu-1; Q:=Q^.next; P:=P^.next; end; daoham:=k; End; BÀI 1_6: THỰC HIỆN CỘNG 1 VÀO DÃY SỐ NHỊ PHÂN Type b=0..1; Position=^Cell; Cell=Record bit:0..1; next:Position; end; Procedure INCREMENT(Var Bnumber: Position; Q: Position); Var K,P: position; Begin P:=Bnumber; while P^.nextQ do P:=P^.next; if P=Bnumber then begin new(K); K^.bit:=1; K^.next:=bnumber^.next; Bnumber^.next:=k; end else if P^.bit=0 then P^.bit:=1 else begin P^.bit:=0; increment(Bnumber,P); end; End; BÀI 1_9 Const max_T=100; Type Elementype= char; Node=integer; Tree = Record label_T: array[1..max_t] of elementype; Parent: array[1..max_t] of Node; max_node:integer; end; Var T: Tree; {----- CHIEU CAO CUA CAY -------} Function Max(a,b:node):node; Begin if a>b then max:=a else max:=b; end; Function Height(n:node;T: Tree): integer; Var h:integer;m:node; Begin if empty(T) then writeln('Cay rong!') else begin h:=0; m:=LEFTMOST_CHILD(n,T); while m0 do begin h:=max(h,height(m,T)); m:=RIGHT_SIBLING(m,T); end; height:=h+1; end; end; BÀI 2_2 {----- DUYET DUONG DI CUA 1 NUT VE GOC ------} Procedure DD(m:node;VAR q: integer; Var A: mang;T:Tree); Var k: node;j:integer; Begin k:=T.parent[m]; j:=0; while kparent_T(Root(T),T) do begin a[j]:=k; k:=T.parent[k]; j:=j+1; end;q:=j-1; End; {------- KIEM TRA M CO O BEN ;TRAI N KHONG ----------} Function ON_LEFT(m,n: node; T:Tree):boolean; Var i,j,q,p:integer;kt:boolean;A,B:mang; Begin kt:=false; if T.parent[m] = T.parent[n] then if n<m then kt:=true else kt:=false else begin dd(m,p,A,t); dd(n,q,B,t); i:=0;j:=0; while a[i]b[j] do if a[i]>a[j] then i:=i+1 else j:=j+1; if a[i-1]<b[j-1] then kt:=true else kt:=false; end; ON_LEFT:=kt; End; {--------- KIEM TRA M CO O BEN PHAI N --------} Function ON_RIGHT(m,n: node; T:Tree):boolean; Var i,j,q,p:integer;kt:boolean;A,B:mang; Begin kt:=false; if T.parent[m] = T.parent[n] then if n<m then kt:=true else kt:=false else begin dd(m,p,A,t); dd(n,q,B,t); i:=0;j:=0; while a[i]b[j] do if a[i]<a[j] then i:=i+1 else j:=j+1; if a[i-1]>b[j-1] then kt:=true else kt:=false; end; ON_right:=kt; End; {--------- M LA TO TIEN CUA N ---------} Function P_ANCESTOR(m,n:node;T:Tree):boolean; Var i,j,p: integer; tim:boolean;A:mang; Begin dd(n,p,A,T);tim:=false; i:=0; while (i<p) and (tim=false) do if a[i]=m then tim:=true else i:=i+1; P_ANCESTOR :=tim; End; {---------- KIEM TRA M CO PHAI LA HAU DUE CUA N KHONG -------} Function P_Descendant(m,n:node;T:Tree):boolean; Var i,j,p: integer;A:mang; tim:boolean; Begin tim:=false; dd(m,p,A,T); i:=0; while (i<=p) and (tim=false) do if a[i]=n then tim:=true else i:=i+1; P_DESCENDANT:=tim; End; BÀI 2_3 {--------- TO TIEN GAN NHAT CUA M VA N --------} Procedure TOTIEN(m,n: node; Var TT: node; T: Tree); Var a,b: mang; i,j,q,p:integer;k:node; Begin if empty(T) then writeln('Cay rong!') else begin tt:=0; {---- duyet duong di cua m ve goc cay ----} k:=T.parent[m]; i:=0; while kparent_T(Root(T),T) do begin a[i]:=k; k:=T.parent[k]; i:=i+1; end; p:=i-1; if not kiemtra(n,p,A) then begin {---- duyet duong di cua n ve goc cay ----} k:=T.parent[n]; j:=0; while kparent_T(Root(T),T) do begin b[j]:=k; k:=T.parent[k]; j:=j+1; end; { --- Tim to tien ----} q:=j-1; i:=0; while i<=p do begin j:=0; while (a[i]a[j]) and (j<=q) do j:=j+1; if (a[i]=a[j]) and (j<=q) then begin tt:=a[i] ; i:=p+1; end else begin tt:=0; i:=i+1; end; end; end; end;end; BÀI 2_4 {-------- DUYET CAY THEO MUC -------} Procedure With_Order(n:integer; T: Tree); Var q: Queue; L: List; i,m: integer; Begin ENQUEUE(ROOT(T),Q); while not empty_Q(Q) do begin i:=front(Q); DEQUEUE(Q); insert_L(i,End_L(L),L); m:=LEFTMOST_CHILD(n,T); while m0 do begin ENQUEUE(m,Q); m:=RIGHT_SIBLING(m,T); end; end; End; BÀI 2_9 {---------- M LA TO TIEN CUA N ? -------} Function IS_ANCESTOR(m,n: node; L1, L2: List):boolean; Var p1, q1, p2,q2: node; Begin p1:=Locate(m,L1); ; q1:=Locate(n,L1); p2:=Locate(m,L2); q2:=Locate(n,L2); if (p1q2) then IS_ANCESTOR:=true else IS_ANCESTOR:=false; End;

Các file đính kèm theo tài liệu này:

  • docCấu trúc dữ liệu - Giải Bài tập bằng Passcal.doc