Prog_2 course- 2014 
2 bytes team 
Kinan keshkeh 
IT Engineering-Damascus University 
3rd year
Double Lists 
Data 
next 
prev 
L_S 
Data 
next 
prev 
Data 
prev 
prev 
next 
next 
Data 
L_E
Definition 
Type 
D_P = ^D_R; 
D_R = Record 
ID:integer; 
next:D_P; 
prev:D_P; 
end; 
var 
L_S, L_E : D_P;
Double Lists Procedures: 
1) Insert a Node 
2) Delete a Node 
3) Search Node
Insert a Node 
Data 
next 
prev 
Data 
next 
prev 
Data 
next 
prev 
Data 
next 
prev 
L_E 
Data 
next 
prev 
L_S 
Temp
1) 
L_S 
Nil 
15 
next 
prev 
Temp 
L_E
3 
next 
prev 
20 
next 
prev 
15 
next 
prev 
2) 
L_S 
S 
L_E 
Temp
3 
next 
prev 
20 
next 
prev 
15 
next 
prev 
3) 
L_S 
S 
L_E 
2 
next 
prev 
Temp
3 
next 
prev 
20 
next 
prev 
15 
next 
prev 
L_S 
S 
L_E 
2 
next 
prev 
Nil 
4) 
Temp
procedure D_L_Insert ( var L_S, L_E: D_P; KEY:integer); 
var 
Temp , S : D_P; 
Located: Boolean; 
begin 
new(Temp); 
temp^.ID:=KEY; 
temp^.next:=nil; 
temp^.prev:=nil; 
15 
next 
prev 
Temp
If L_S=nil then 
begin 
L_S:=Temp; 
L_E:=Temp; 
end 
Else 
begin 
S:=L_S; 
Located:=False; 
while (S<>nil) and (not Located) do 
if S^.id < key then 
S:=S^.next 
else 
Located:=True; 
Temp^.next:=S; 
+2 points
If S=L_S then 
begin 
L_S^.prev:=Temp; 
L_S:=Temp; 
end 
Else if S=nil then 
begin 
Temp^.prev := L_E; 
L_E^.next := Temp; 
L_E:=Temp; 
end 
Else 
begin 
Temp^.prev := S^.prev; 
S^.prev^.next := Temp; 
S^.prev := Temp; 
end; 
end; 
end; {procedure}
1) 
L_S 
Nil 
Delete a Node 
flag 
3 
L_E
3 
next 
prev 
20 
next 
prev 
15 
next 
prev 
L_S 
L_E 
key 
3 
2) 
temp 
3 
next 
prev 
L_S 
Nil 
temp 
L_E 
flag 
2
3 
next 
prev 
20 
next 
prev 
15 
next 
prev 
L_S 
L_E 
temp 
3) 
falg 
2 
key 
20
3 
next 
prev 
20 
next 
prev 
15 
next 
prev 
L_S 
L_E 
4) 
flag 
2 
key 
15 
S
3 
next 
prev 
20 
next 
prev 
15 
next 
prev 
L_S 
L_E 
Nil 
flag 
1 
key 
99 
5) 
S
procedure D_L_Delete ( var L_S,L_E: D_P; KEY:integer; var flag :char); 
var 
Temp , S:D_P; 
begin 
If L_S=nil then 
flag:=‘3’ 
Else if KEY =L_S^.id then 
begin 
Temp:=L_S; 
L_S:=L_S^.next; ls^.prev:=nill ; 
Dispose(Temp); 
flag:=‘2’; 
If L_s=nil then 
L_E:=nil; 
Else 
L_s^.prev:=nil; 
end
Else if KEY = L_E^.id then 
begin 
Temp:=L_E; 
L_E:=L_E^.prev; L_E^.next:=nil; Dispose(Temp); 
Flag:=‘2’; 
end 
Else 
begin 
S:=L_S; 
while (S<>nil) and (S^.id <> KEY ) do 
S:=S^.next; 
if S=nil then 
flag:=‘1’; 
else 
begin 
S^.next^.prev:=S^.prev; 
S^.prev^.next:=S^.next; Dispose(S); 
flag:=‘ 2 ’; 
end; 
end; 
end; {procedure}
Homework: 
+15 points 
اكتب اجرائية البحث عه عنصر ما في سلسة مترابطة 
مه طرفيه : 
Search( var L_s, L_E : D_P ; Key:integer; 
var p: D_P ; var flag: char); 
بحيث تحفظ الاجرائية مؤشر على مكان العنصر المراد, 
وتعيد محرف يعبر عه حالة البحث ) فشل-وجد العنصر- 
السلسلة فارغة(
Group : group link 
Mobile phone- Kinan : 0994385748 
Facebook account : kinan’s account 
2 bytes team

2Bytesprog2 course_2014_c7_double_lists

  • 1.
    Prog_2 course- 2014 2 bytes team Kinan keshkeh IT Engineering-Damascus University 3rd year
  • 2.
    Double Lists Data next prev L_S Data next prev Data prev prev next next Data L_E
  • 3.
    Definition Type D_P= ^D_R; D_R = Record ID:integer; next:D_P; prev:D_P; end; var L_S, L_E : D_P;
  • 4.
    Double Lists Procedures: 1) Insert a Node 2) Delete a Node 3) Search Node
  • 5.
    Insert a Node Data next prev Data next prev Data next prev Data next prev L_E Data next prev L_S Temp
  • 6.
    1) L_S Nil 15 next prev Temp L_E
  • 7.
    3 next prev 20 next prev 15 next prev 2) L_S S L_E Temp
  • 8.
    3 next prev 20 next prev 15 next prev 3) L_S S L_E 2 next prev Temp
  • 9.
    3 next prev 20 next prev 15 next prev L_S S L_E 2 next prev Nil 4) Temp
  • 10.
    procedure D_L_Insert (var L_S, L_E: D_P; KEY:integer); var Temp , S : D_P; Located: Boolean; begin new(Temp); temp^.ID:=KEY; temp^.next:=nil; temp^.prev:=nil; 15 next prev Temp
  • 11.
    If L_S=nil then begin L_S:=Temp; L_E:=Temp; end Else begin S:=L_S; Located:=False; while (S<>nil) and (not Located) do if S^.id < key then S:=S^.next else Located:=True; Temp^.next:=S; +2 points
  • 12.
    If S=L_S then begin L_S^.prev:=Temp; L_S:=Temp; end Else if S=nil then begin Temp^.prev := L_E; L_E^.next := Temp; L_E:=Temp; end Else begin Temp^.prev := S^.prev; S^.prev^.next := Temp; S^.prev := Temp; end; end; end; {procedure}
  • 13.
    1) L_S Nil Delete a Node flag 3 L_E
  • 14.
    3 next prev 20 next prev 15 next prev L_S L_E key 3 2) temp 3 next prev L_S Nil temp L_E flag 2
  • 15.
    3 next prev 20 next prev 15 next prev L_S L_E temp 3) falg 2 key 20
  • 16.
    3 next prev 20 next prev 15 next prev L_S L_E 4) flag 2 key 15 S
  • 17.
    3 next prev 20 next prev 15 next prev L_S L_E Nil flag 1 key 99 5) S
  • 18.
    procedure D_L_Delete (var L_S,L_E: D_P; KEY:integer; var flag :char); var Temp , S:D_P; begin If L_S=nil then flag:=‘3’ Else if KEY =L_S^.id then begin Temp:=L_S; L_S:=L_S^.next; ls^.prev:=nill ; Dispose(Temp); flag:=‘2’; If L_s=nil then L_E:=nil; Else L_s^.prev:=nil; end
  • 19.
    Else if KEY= L_E^.id then begin Temp:=L_E; L_E:=L_E^.prev; L_E^.next:=nil; Dispose(Temp); Flag:=‘2’; end Else begin S:=L_S; while (S<>nil) and (S^.id <> KEY ) do S:=S^.next; if S=nil then flag:=‘1’; else begin S^.next^.prev:=S^.prev; S^.prev^.next:=S^.next; Dispose(S); flag:=‘ 2 ’; end; end; end; {procedure}
  • 20.
    Homework: +15 points اكتب اجرائية البحث عه عنصر ما في سلسة مترابطة مه طرفيه : Search( var L_s, L_E : D_P ; Key:integer; var p: D_P ; var flag: char); بحيث تحفظ الاجرائية مؤشر على مكان العنصر المراد, وتعيد محرف يعبر عه حالة البحث ) فشل-وجد العنصر- السلسلة فارغة(
  • 21.
    Group : grouplink Mobile phone- Kinan : 0994385748 Facebook account : kinan’s account 2 bytes team