2Bytesprog2 course_2014_c7_double_lists

21
Prog_2 course- 2014 2 bytes team Kinan keshkeh IT Engineering-Damascus University 3 rd year

Transcript of 2Bytesprog2 course_2014_c7_double_lists

Prog_2 course- 2014

2 bytes team

Kinan keshkeh

IT Engineering-Damascus University

3rd year

Double Lists

Data

next

pre

v

L_S

Data

next

pre

v

Data

pre

v

pre

v

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

pre

v

Data

next

pre

v

Data

next

pre

v

Data

next

pre

v

L_E

Data

next

pre

v

L_S

Temp

1)

L_S

Nil 15

next

pre

v

Temp L_E

3

next

pre

v

20

next

pre

v

15

next

pre

v

2)

L_S

S

L_E Temp

3

next

pre

v

20

nex

t

pre

v

15

next

pre

v

3)

L_S

S

L_E

2

next

pre

v

Temp

3 n

ext

pre

v

20

nex

t

pre

v

15

next

pre

v

L_S

S

L_E

2

next

pre

v

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

pre

v

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

pre

v

20

next

pre

v

15

next

pre

v

L_S L_E

key 3 2)

temp

3 next

pre

v

L_S

Nil

temp

L_E

flag

2

3 n

ext

pre

v

20

next

pre

v

15

nex

t

pre

v

L_S L_E temp

3)

falg

2 key 20

3 n

ext

pre

v

20

nex

t

pre

v

15

next

pre

v

L_S L_E

4)

flag

2 key 15

S

3 n

ext

pre

v

20

next

pre

v

15

nex

t

pre

v

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