You are on page 1of 68

‫ ت‬ ‫ ‬

‫ و ا ب   رة   م   ا  ت‪ .‬آ أن درا ا ب‬
‫‪ 23‬درا آ‪ ./0 1‬ه‪ +,‬ا*ﻡ ت دا(' ا ب‪ ،‬وآ‪ 1‬ﻡ ‪ 53‬و آ‪ 1‬ا‪ 134‬دة‬
‫ﻡ‪ . 50‬ﺡ‪ 7 3 8‬ا ‪ Bit 6‬اﺡ;ة ا‪**  :‬ﻡ ت و @‪;?3‬م ا‪:‬ر> م ا=‪< 0‬‬
‫‪ 0‬و‪ Bit '=3 1‬ﻡ‪ ،‬و ;د ال ‪ Bits‬ا@‪;?3‬ﻡ ‪ '=3‬ا‪7‬ﻡ‪ CD Character B‬ﺡ ب‬
‫ﻡ @‪E F‬ل ا ‪ .Byte size 6‬و  ‪ D C 3‬ن ذاآ‪7‬ة ا ب  رة  ﻡ ﻡ‬
‫‪ ،Bits‬ﺡ‪ .3 8‬وﺽ‪ H‬آ' ﻡ ﻡ ‪ CD Bits‬ذاآ‪7‬ة ا ب ‪ CD‬وﺡ;ات آ ‪7‬ة @‪F‬‬
‫‪ Byte‬و‪ K FD‬اا‪ J‬آ' ;د ﻡ ا ‪ 3‬ت ‪ H‬ﻡ‪ K H‬و @‪ F‬آ* ‪ Word‬وآ'‬
‫وﺡ;ة ﻡ ه‪ +,‬اﺡ;ات ) ‪ 6‬أو ا*( ن ‪0 5‬ان وه  رة  ر>‪ .‬و ‪* N*O‬‬
‫ﻡ>‪ H‬ا ‪ CD 6‬ا‪,‬اآ‪7‬ة )‪.(location‬‬

‫ ع ات ‪:Data Types‬‬


‫إن آ* ‪ F0 data‬آ' ‪  CR‬ﻡ ‪ 3‬ا‪ 7 O‬ﻡ‪ Q‬ﺡ ‪. F‬إذًا ا‪0‬ع ا  ‪ C‬ه‬
‫ع ﻡ ا  ت  ‪U‬ﺽ ‪ D‬إ‪> F‬ا; آ‪ 1‬ﻡ  ه‪ +,‬ا  ت‪ .‬ﺡ‪ ;; .3 8‬ا‪0‬ع ا  ‪C‬‬
‫‪ ;;3‬ا‪ .‬ﻡ ذ‪ W‬ا‪0‬ع و ‪ ;;3‬ا* ت ا@ح ‪ F* 5‬ه‪ +,‬ا‪..‬‬

‫إن ی أي  ع  ﺏل ید ا ‪:‬‬


‫‪ .1‬ﺡ‪ .‬ا‪,‬اآ‪7‬ة ا‪ C3‬ف ‪B‬ه ا‪ 7Y3‬ا‪7‬ف ﻡ ه‪,‬ا ا‪0‬ع‪.‬‬
‫‪ .2‬آ‪ '= 1‬ا  ت دا(' ا ب‪.‬‬

‫ات ‪: Arrays‬‬
‫ه‪  C‬رة  ﻡ ﻡ‪ 530‬و ﻡ‪ 7‬ﻡ ا‪ 7 0‬ا‪ 0 F0 . @ 3‬ﻡ‪ 530‬أي ‪5‬‬
‫;د ﻡ;ود ﻡ ا‪. 7 0‬و ﻡ‪  7‬أي أن ‪7 0‬ه ﻡ‪  7‬ا‪:‬ول ‪... 8 = D C = D‬وه‪,‬ا ‪،‬‬
‫وﻡ‪ @ 3‬أي أن ﺝ‪7 0 H‬ه ﻡ ‪ ]1‬ا‪0‬ع ‪ Type‬ﻡ=_ ‪.Char‬‬
‫‪  4‬ا‪   H‬ﻡ?‪ ]1 CD 1*3‬ا`‪.D1‬‬

‫ا&‪%$‬ن ‪:Array Declaration  !" #$‬‬


‫آ' ع ﻡ أ اع ا`‪ D1‬ت ا@‪;?3‬ﻡ ‪ CD‬ا ‪ 7‬ﻡ‪ J Q‬أن * ‪7 .@> CD 50‬‬
‫ا‪0‬ع ; ا* ازة ‪ Type‬و ن ا`‪ Y‬ا ﻡ ‪   Y CD 5 Syntax‬ل آ ‪: C b‬‬

‫‪Type‬‬
‫;‪Name=Array[index type] of component type‬‬
‫ﺡ‪ 8‬أن‪:‬‬
‫• ‪ Name‬ا‪ Identifier C17 .‬ﺝ;; ‪,5‬ا ا‪0‬ع ﻡ ا`‪ D1‬ت‪.‬‬
‫• ‪ Index type‬ع ا‪ 7Rf‬ا;*‪ ، F‬و أن ن ﻡ;ى ‪ Integer d‬أو ﻡ;ى ﺡ‪7‬ف‬
‫‪ Character‬أو ﻡ;ى ﻡ‪ BooleanCO0‬أو ﻡ ﺝ‪.<B‬‬
‫• ‪ Component type‬ع ا ت ‪ :‬أن ن أي ع ﺡ‪ C‬أو ‪ d‬أو‪ ...‬ا‪.g‬‬

‫ه‪*+($ ,-‬ن أ*ن () ا(! ت ه ‪:‬‬


‫• ?‪ B‬ا  ت‪.‬‬

‫‪DataStrcture‬‬ ‫‪1‬‬ ‫ب‬ ‫أ‪/‬ا‬


.‫ﺝ ع ا  ت‬73‫• ا‬
‫_ن‬U‫ ا‬.@> CD ‫ع‬0‫ا ا‬,‫ ت ﻡ ه‬D1`‫_ن  ا;; ﻡ ا‬U‫_ن  ا‬U‫ا ا‬,‫; ه‬
.‫ات‬7Y3‫ ا‬
:+."‫أ‬
Var
A:array[1..100] of integer;

.d`‫ع ا‬0‫ ﻡ ا‬100 ‫ ﻡ ﻡ‬D1`‫ وه  رة  ﻡ‬A 7Y3‫_ن  ا‬U‫ ا‬. •

Const
Num=100;
Var
A:array[1..num] of integer;

.D1`‫ ﻡ;ى ا‬CD Num 6 =‫?;ام ا‬3  7Y3‫_ن  ا‬U‫ ا‬. •

Const
Num=100;
Type
Indextype=1..num;
Var
A:array[indextype] of integer;

Num 6 =‫?;م ا‬3@ ‫ي‬,‫ ا‬Indextype ‫ع‬0‫?;ام ا;ى ﻡ ا‬3  D1`‫_ن  ﻡ‬U‫ ا‬. •
. 5 *;‫ات ا‬7Y3‫ رة  ;د ا‬  D1`‫ ا‬.‫ف ﺡ‬7 ‫  أن‬N  ‫ﻡ‬
.‫ ت‬D1`‫ ا‬K   ‫_ ت ﻡ‬U *=‫أﻡ‬

Const
Min=0;
Max=10;
Type
Week=array[min..max]of Real;
Degree=array[1..100] of integer;

: ‫ت‬/‫ﺡ‬%"
‫  أن‬4 5 F*;‫ ا‬7Rf‫ و  ا‬،C‫ع ا‬0‫ ﻡ ا‬D1`‫  أن ن ا‬.1
.C‫ع ا‬0‫ن ﻡ ا‬
:‫  ' ا= ل‬F* 7Y3‫ع و ا‬0‫_ن  ا‬U‫ ا‬Q‫  دﻡ‬.2
Var
a:array[1..10] of real;
.‫ ﺇﻥ ﺤﺠﻡ ﺍﻝﻤﺼﻔﻭﻓﺔ ﻓﻰ ﻝﻐﺔ ﺒﺎﺴﻜﺎل ﻻ ﻴﺘﻐﻴﺭ ﺃﺜﻨﺎﺀ ﺘﻨﻔﻴﺫ ﺍﻝﺒﺭﻨﺎﻤﺞ‬.3
.for *‫?;ام ﺝ‬3j  ‫  دى و ا‬7Y3‫ آ‬D1`‫اءة آ' ا‬7>  4 .4

 !(‫ﺹ ا‬-$ ‫ام‬3*‫ا‬

DataStrcture 2 ‫ب‬ ‫ا‬/‫أ‬


‫ى‬7 ‫وف‬، ‫ى‬7(:‫ات ا‬7Y3‫   ل آ ي ﻡ ا‬Y CD 5‫?;اﻡ‬3‫ات ا;*  ا‬7Y3‫ا‬
.‫ ت‬D1`‫?;ام ا‬3‫ًا ﻡ ا‬7=‫' آ‬5@ For *‫ﻡ=* آ أن ﺡ‬:‫ ﻡ ا‬C* D
: 53 E‫ و‬D1`‫اءة ﻡ‬7> •

Var
Degree:array[1..10] of integer;
I:integer;
Begin
For I:=1 to 10 do
Read(degree[I]);
For I:=1 to 10 do
Writeln(degree[I]);
End.

‫   رة‬3‫ آ‬ jD ‫ع‬0‫] ا‬1 ‫ ﻡ‬D1`‫ًا =' ﻡ‬7Y3‫ ﻡ‬A,B ‫• إذا آ ن آ' ﻡ‬
: 3‫ د ا‬0U‫ا‬

A:=B;

B D1`‫ ا‬FD ' ‫ ا‬7`0‫ ا‬F‫ إ‬A D1`‫ ا‬7 0 ‫ ﻡ‬7`0 '‫ د آ‬0‫ إ‬F0 ‫و‬

:Two Dimensional Arrays ‫ﺏد‬6‫ ا‬4-‫ا(! ت ﺙ‬

53 E‫و‬، 50 ‫_ن‬U‫ ا‬7E CD ; ‫ﺡ د ا‬:‫ ت ا‬D1`* 5 l‫ ﻡ‬F‫وه‬
:_
ً =‫ﻡ‬
Type
Matrix=arrary[1..5,1..10]of integer;
Var
A:matrix;

C 3 ‫ة أ;ة و‬7l ‫ف و‬1 @( ‫ ﻡ  ﻡ‬D1`‫ ﻡ‬.‫ أ‬A ‫; أن‬1 +_‫_ن أ‬U‫ا‬
‫ات‬7Y3‫ ا‬F@ ‫ و‬، ‫ه‬7 0 '‫ وأن آ‬، 5x10 ‫ه @ وي‬7 0 ‫ن ;د‬jD
:F 4‫ =' ا‬F‫وه‬،*;‫ا‬

A[1,1]……a[1,10],A[2..1]..A[5 ,1]…A[5,10]

:C 3 ‫ آ‬For ‫?;م دورة‬3@ ‫  أن‬D1`‫ ا‬+,‫اءة ه‬7

For I:=1 to 5 do
For j:= 1 to 10 do
Read(a[I,j]);

.‫ا‬,‫ وه‬C = D ‫ول‬:‫  ا` ا‬E .3 ‫اءة أي‬7‫ ا‬7O 5 l‫ ﻡ‬7O .3 53 E‫و‬

:‫ــل‬."

DataStrcture 3 ‫ب‬ ‫ا‬/‫أ‬


H .‫ أ;ة ﺙ‬4‫ف و‬1 3 ‫ ﻡ‬3 ‫ ا‬B ‫ و‬A 3D1`‫ ا‬7 0 ‫أ‬7 Q‫ ﻡ‬7 J3‫اآ‬
ً2‫ أ ده أ‬C3‫ ا‬C D1`‫ ا‬CD H‫  ' ا‬p13‫ ا=  و‬H‫ ﻡ‬F‫و‬:‫ ا‬D1`‫ ا‬7 0
C D1`‫ ا‬7 0 H O .‫ ﺙ‬، 3 X 4

uses crt‫؛‬
type
My_Array=array[1..3,1..4] of integer‫؛‬
var
A,B,C:My_Array‫؛‬
i,j:integer‫؛‬
begin
clrscr‫؛‬
{reading the first Array}
for i:=1 to 3 do
for j:=1 to 4 do
begin
write('Enter A[',i,',',j,'] : ');
readln(A[i,j]);
end‫؛‬
{reading the second Array}
for i:=1 to 3 do
for j:=1 to 4 do
begin
write('Enter B[',i,',',j,'] : ');
readln(B[i,j])‫؛‬
end‫؛‬
{calculating the Third Array}
for i:=1 to 3 do
for j:=1 to 4 do
begin
C[i,j]:=A[i,j]+B[i,j]‫؛‬
end‫؛‬
{Printing The Third Array}
for i:=1 to 3 do
begin
for j:=1 to 4 do
write(C[i,j]:10)‫؛‬
writeln‫؛‬
end‫؛‬
readln
end.

Records ‫ات‬

DataStrcture 4 ‫ب‬ ‫ا‬/‫أ‬


،K ‫ ا‬52  *3‫ ﻡ ﻡ ا  ت ا‬5 ‫ آ‬CD ‫ ت‬D1`‫ ا‬l ‫ا@_ت‬
' ‫?;ام‬3‫ ا‬00 _ً =D، ‫ع‬0‫ ا‬CD 1*3?‫  ت ﻡ‬C* 5<‫ا‬3‫ إﻡ  اﺡ‬CD 50 *3? ‫و‬
...‫ ا_د‬g‫ و ر‬+7 ‫ ﻡ آ  و‬r?R  ‫ع‬0‫ ا‬0 3‫ ﻡ*ﻡ ت ﻡ‬B?3
‫?;م ﻡ‬3@ ‫ ف‬0 jD – ‫ ت‬D1`‫ ا‬CD ‫ – آ ه ا ل‬F*;‫ ا‬7Rf‫?;ام ا‬3‫ ﻡ ا‬4 ً ;‫و‬
.Field '  ‫ف‬7

:Record Declaration ‫ت‬%)8‫ ا‬#$ ‫ن‬%$&‫ا‬


*‫_ن  ع ا@' ; ا‬U‫ ﻡ (_ل ا‬W‫ وذ‬،'@‫ ا ;ا *  ه* ا‬CD
W‫ و ن ذ‬، ‫ع‬0‫ ا‬W‫ ﻡ ذ‬7=‫ @' واﺡ; أو أآ‬7Y3‫ *  ﻡ‬W‫ ; ذ‬Type ‫ازة‬
. Var ‫; ا* ازة‬
: ‫ﻡ= ل‬
(D;‫ا‬، C‫`' ا;را‬1‫ا‬، ‫_ب ) أ‬O‫   ا‬3‫ ا*ﻡ ت ا‬B? ;7 0 ‫ض أ‬73D‫ا‬

Name = Array[1..10] of char;


Class=integer;
Year=integer;

1*3?‫ ﺙ_ﺙ ﺡل ﻡ‬F* ‫ ى‬Student ‫ع‬0‫_ن  ' ﻡ ا‬U‫ ا‬.3 C 3‫ا= ل ا‬

Const
Max=5;
Type
Str= array[1..max] of char;
Student= record
Name :str;
Class:integer;
Year:integer;
End;
Var
Stud:Student;

:Usage of field ‫ت‬%)8‫ ل ا‬9‫ام ﺡ‬3*‫ا‬


‫ ﻡ‬.> 5‫; إ‬0@ ‫ أن‬D ،7Y3‫?;م آ ي ﻡ‬3@ ‫  أن‬5 jD ، ‫_ن  ا@_ت‬U‫; ا‬
‫ق‬7E ‫ ﺙ_ث‬0‫ض ه‬73@ ‫وف‬.  3‫اءة أو ا‬7‫ ا‬7‫أو أن ن ﺽ أواﻡ‬،‫ع‬0‫] ا‬1
:F‫ ا@_ت وه‬H‫ ﻡ' ﻡ‬3*
:<9-‫ام ا‬3*‫ ﺏ‬.1
‫اد‬7‫ ا' ا‬.‫ ا‬J3 .‫ ﺙ‬،O0  3 ‫ ا@' و‬.‫ ا‬J3 ‫ ﺡ' @' ﻡ‬H‫ ﻡ' ﻡ‬3*
.7( 7Y3‫ ا' آ ي ﻡ‬H‫ ﻡ' ﻡ‬3‫ ا‬.3 W,‫ و‬، ‫ ﻡ' ﻡ‬3‫ا‬
:_
ً =‫ﻡ‬
Stud.name:=’ali ‘;
Stud.class:=4;
Stud.year:=2001;

:With-do -‫ام ﺏ‬3*‫ ا‬.2

DataStrcture 5 ‫ب‬ ‫ا‬/‫أ‬


'@‫ ا‬.‫;ﻡ ن ا‬0 ً`( ‫ و‬،‫ﺡ ن‬:‫ ا‬K FD *‫ ا@  >; ن ﻡ‬7O‫ا‬
. '@‫ ا‬.‫' ا‬5 ‫ أن‬0 d3 With - do 0 ‫إن‬. ‫ ا;; ﻡ ال‬F* ‫ى‬3‫ًا و‬7 ‫آ‬
:‫ ا ﻡ‬Y`‫ا‬
With var do statement
: ‫ ان‬8‫ﺡ‬

'@ 7Y3‫ ﻡ‬.‫ا‬ Var


;; .3 '‫ن أي ﺡ‬jD '‫ ا‬W* ‫ﺝ* او ﻡ ﻡ ا' و (_ل‬ Statement
. * .  N @ ‫ أن‬F‫ دا‬4 With *‫* ; آ‬

:J3 ‫ ﻡ إ_ ت  أن‬N  ‫ ﻡ‬F* ‫ ء‬0 D

With stud do
begin
name:=’ahmed’;
birth.day:=22;
birth.mon:=1;
birth.year:=1975;
place:=’sudan’;
end;

:?)8+ @+‫د ا‬-A‫ ا‬.3


]1 5 ‫ط أن ن‬7l ‫ و‬،‫ د واﺡ;ة‬0‫  رة إ‬7( ' F‫; ' إ‬0@ ‫ أن‬
:C 3‫_ن ا‬U‫ ا‬0; ‫ إذا آ ن‬W‫ ذ‬F* ‫ وآ= ل‬،'@‫ع ا‬

Var
Stud1,stud2:student;

: 3‫ د ا‬04‫  رة ا‬J3 ‫ ان‬00

Stud1:=stud2;

DataStrcture 6 ‫ب‬ ‫ا‬/‫أ‬


‫ل‬."
‫ ا  ت‬W* H O .‫ ﺙ‬.4‫ وا‬.>7‫ ان ﻡ ا‬J O‫أ  ت ' ا‬7 Q‫ ﻡ‬7 J3‫اآ‬

uses crt;
Type
Student = record
No:integer;
Name: string;
end;
var
Stud: Student;
begin
clrscr;
write('Enter Student No: ');
readln(Stud.No);
write('Enter Student Name: ');
readln(Stud.Name);

with Stud do
begin
write('Student : ',No,' ',Name);
end;

Readln
end.

‫ل‬."
;‫ واﺡ‬J E ‫ ﻡ‬4
ً ; ‫_ب‬E 5 ‫ '  ت‬3@ +_‫ أ‬Q‫ ﻡ‬7 ‫اﺝ' ا‬

uses crt;
Type
Student = record
No:integer;
Name: string;
end;
var
Stud: array[1..5] of Student;
i:integer;
begin
clrscr;
for i:= 1 to 5 do
begin

DataStrcture 7 ‫ب‬ ‫ا‬/‫أ‬


writeln('Enter No of student ',i);
readln(Stud[i].No);
writeln('Enter Name of Student ',i);
readln(Stud[i].Name);
end;
for i:=1 to 5 do
writeln('Student ',i,' : ',Stud[i].No,' ',Stud[i].Name);

Readln
end.

‫  ا  ت‬
‫آ  وإ ﺡ * ت‬7‫ ﻡ‬7 0 'R CD ‫ ا  ت‬./0 .3 8‫ﺡ‬.‫ ء ا  ت‬0  ‫ق‬7E C‫ه‬
.7 0‫ ا‬+,‫  ه‬
.Q‫ ﻡ‬7 ‫ ا‬CD ‫ ت‬7`3‫ء ا‬B‫ ﺝ‬CD 0 ‫_ن‬U‫ ا‬.3 Data type C  ‫ع ا‬0‫ا‬
CD ‫ ت‬7`3‫ء ا‬B‫ ﺝ‬CD 75/ ‫ ل أن‬3‫ واﺡ‬Q‫ﻡ‬7 ‫ ذه ا‬CD xD ;‫ ا  ت ﺝ‬0 0
4 ‫ ور‬Q‫ ﻡ‬7 ‫ا‬

:Abstract Data Types ‫ل ات ا()دة‬C‫أ‬


‫ أﻡ= ل‬0‫  ت ﻡ‬0 5*(‫ف ;ا‬7 @ ‫' آ‬R CD ‫ ع ﻡ أ اع ا  ت ن‬C‫ه‬
‫ و‬7Y C3‫  ﻡ ا  ت ا‬0 ‫ ا‬+,‫ ه‬x7 .‫ات‬7Rf‫ ت أو ا@_ت أو ا‬D1`‫ا‬
. 0 ‫ ا‬+,‫ ه‬7 0 .> Q 
،1*3?‫ت *م ا ب ا‬4 ‫ ﻡ‬CD ‫  ت‬O3‫ ﻡ ا‬7=‫دة آ‬7‫ ل ا  ت ا‬RU ‫إن‬
‫ * ت ا آ ة آ أن‬CD ‫?;م‬3@ ‫ف‬1`‫ و ا‬1*3?‫' ا‬Yl3‫ ا‬./ CD ‫?;م‬3@ ‫ ; ت‬D
‫ ا ;ا‬5  ‫دة‬7‫ ل ا‬R:‫ ر ا‬3‫ ا‬00 .‫ﺝ ت‬73‫ ء ا‬0 CD ‫ ر ;(' `رة واﺽ‬R:‫ا‬
Object Oriented Programming language ‫ ت‬0< * 5‫ﻡ اﺝ‬7 ‫ ا‬7O ‫ا‬
.OOPL

Stacks ‫ات‬
:Define Stack(‫ی ا‬
‫ ا  ت ﻡ‬D ‫ف و إﺽ‬,‫ ﺡ‬5D .3 ،O( 7O p1 ‫ > < ﻡ ا  ت‬C‫ا; ه‬
.Top‫ ا‬C@ ;‫ف واﺡ‬7E
‫ وأن‬، Bottommost ‫ ا ع‬CD A1 7`0‫ل أن ا‬0D S=(a1,..,an) ;‫ ا‬0; 
C 3‫' ا‬l‫ا‬.;‫ > ا‬CD an ‫و ل أن‬1<I<n 8‫ ﺡ‬Ai 7`0‫ ﻡ ا‬F*‫ أ‬Ai-1 7`0‫ا‬
.;‫م ا‬51‫ ﻡ‬d‫ﺽ‬
An

DataStrcture 8 ‫ب‬ ‫ا‬/‫أ‬


‫‪Top‬‬ ‫‪F‬‬
‫‪E‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫‪Bottommost‬‬ ‫‪A‬‬ ‫‪A1‬‬

‫ﻡ ‪ 7‬ا; ‪ jD‬إذا أﺽ‪ 01‬ا‪ A,B,C,D,E,F7 0‬إ‪ C‬ا; ‪ ]10‬ه‪,‬ا ا‪jD،J 73‬ن‬
‫ا‪ 7`0‬ا‪,‬ي ن ‪j‬ﻡ ‪ 0‬ﺡ‪ D,‬ه ا‪ F 7`0‬أي أن (‪ .3 7`0 7‬إد(  ‪ CD‬ا; ه‬
‫‪. 4‬و ‪,5‬ا ا@ ‪ C* N*O J‬ه‪,‬ا ا‪0‬ع ﻡ أ‪ R‬ل ا  ت ا‪7‬دة أ‪(LIFO) .‬‬ ‫ا‪,‬ي ‪,‬ف أو ً‬
‫ا(‪ `3‬رًا ل ‪ Last IN First Out‬و =' ‪ CD‬ﺡ  ا‪U‬ﺽ ‪jD D‬ن ا‪ 7`0‬ا;; ` ‪ CD d‬ا‪.‬‬
‫_ ا‪73D‬ض أن ;‪ 0‬ا; ‪ A‬و ا‪ @( H@ C3‬أر> م و أرد أن ‪7‬ي *‬ ‫ﻡ= ً‬
‫أﺽ ‪ 35 .* D‬و ‪ 23‬و ‪ 40‬و ‪jD 20‬ن ا‪:‬ﺽ ‪ D‬ن ‪ CD‬ا  ‪ +‬واﺡ; وه أ*‪ F‬ا;‬

‫‪20‬‬
‫‪40‬‬ ‫‪40‬‬
‫‪23‬‬ ‫‪23‬‬ ‫‪23‬‬
‫‪35‬‬ ‫‪35‬‬ ‫‪35‬‬ ‫‪35‬‬

‫‪4‬‬ ‫‪3‬‬ ‫‪2‬‬ ‫‪1‬‬ ‫‪A‬‬


‫ا( ر‪E‬‬

‫و ‪:‬ﺝ‪7‬اء * ا@‪ J‬ﻡ ا; ‪ J@ ،‬ا‪ J 73 C@ J 73 7 0‬د(‪5‬‬
‫‪ 4‬ﺙ‪ 40 .‬ﺙ‪ 23 .‬ﺙ‪. 35 .‬‬
‫ا; أي ‪ J .3‬ا‪ 20 .>7‬أو ً‬

‫‪+($‬ت ا( ‪:Operations on Stacks‬‬


‫_ ﻡ‪ 7Y C* 50‬ﺡ ‬ ‫ﻡ ا= ل ا@ ‪_ N‬ﺡ‪ p‬أن ه‪ 0‬ك *‪ 3‬ن ر<@‪ 3‬ن ' آ ً‬
‫ا; ‪ ،‬وه * ا‪U‬ﺽ ‪ Push D‬و* ا‪,‬ف ‪jD ، Pop‬ذا ا‪73D‬ﺽ‪ 0‬أن ﻡ; ا‪S 5‬‬
‫و ‪ ;7‬أن ‪7 0 jD، a 7`0 5 2‬ﻡ‪ * B‬ا‪U‬ﺽ ‪، Push(S,a) D‬و; إﺝ‪7‬اء ه‪+,‬‬
‫ا* ‪jD‬ن ا‪ > CD d ` a 7`0‬ا;‪ ،‬و آ ‪ * 6‬ا‪,‬ف ‪ .3 4‬إ‪ 4‬ﻡ >‬
‫ا; ‪ .3 jD xD‬ﺡ‪,‬ف ا‪ 7`0‬ا‪,‬ي ‪ > CD H‬ا;‪.‬‬
‫‪710‬ض ا‪b‬ن أ ‪j 0> 0‬ﺝ‪7‬اء * ا‪,‬ف‪ pop‬و آ‪7‬ر ه ﺡ‪ CD 7`0 7( F3‬ا;‪،‬‬
‫‪ F* '` 0 jD‬ﻡ; (  ‪ ' > W, Emptystack‬إﺝ‪7‬اء * ا‪,‬ف ‪ J‬ا‪ 3‬آ; ﻡ أن‬
‫ا; @‪  ( 6‬وذ‪ W‬ا‪ O‬ا* )‪ Empty(s‬وا‪ 7 ? C3‬ﻡ إذا آ ‪ 6‬ا; ( ‬
‫أم ‪jD ،4‬ذا آ ‪ 6‬ا; (  ‪jD‬ن )‪ FO Empty(s‬ا ا‪ True O0‬وإ‪FO 5 jD 4‬‬
‫ا ا‪.False O0‬‬

‫‪710‬ض ا‪b‬ن أن ;‪ 0‬ﻡ; (  ‪،‬و>‪j 0‬ﺝ‪7‬اء * ﺡ‪,‬ف ‪C* '` 0 jD‬‬
‫‪ Underflow‬و ‪ rD J jD C 3‬ا; ا‪ O‬ا* )‪ ' > Empty(s‬إﺝ‪7‬اء *‬
‫ا‪,‬ف ‪.‬و  =' إذا آ ن ;‪ 0‬ﻡ; ﻡ‪ z*3‬و >‪j 0‬ﺝ‪7‬اء * إﺽ ‪'` 0 jD Push D‬‬
‫*‪.OverFlow F‬‬

‫‪DataStrcture‬‬ ‫‪9‬‬ ‫ب‬ ‫أ‪/‬ا‬


،Overflow ‫ دي‬13 Push D ‫ﺽ‬U‫ > ' * ا‬Full(s) * ‫?;ام‬3‫  ا‬W, ‫و‬
‫ إذا‬False O0‫ ا ا‬H‫ﺝ‬7 ‫ آ‬،z*3‫ ا; ﻡ‬6 ‫ إذا آ‬true O0‫ ا ا‬H‫ﺝ‬7 C‫وه‬
.W‫ ذ‬7{ 6 ‫آ‬

Stacks implementation Using : ‫ ﺏل‬G  ‫ام ا(! ت‬3*‫ء ا(ت ﺏ‬-‫ﺏ‬


Arrays in Pascal:
 ‫  رة‬C‫ وه‬،‫ ت‬D1`‫ ك ا‬0‫   ل ه‬Y CD‫و‬،7 0‫ ﻡ ﻡ ا‬C‫ا; ت ه‬
‫ات‬7Y3‫ف ع ﻡ ا‬7 0 jD ‫   ل‬Y CD ‫=' ا; ت‬3 W, ،‫ﻡ ﻡ ا  ت‬
.D1`‫ ﻡ‬O‫ ا‬Stack . 
‫;د‬D ،D1`‫  آ' ﻡ ا; وا‬E CD ‫ًا‬7 ‫ ً آ‬D_3(‫ ك ا‬0‫ أن ه‬p‫ _ﺡ‬00‫و‬
‫ا‬,‫ ه‬7Y ‫?;م أن‬3@*  4‫ و‬،D1`‫_ن  ا‬U‫ ا‬,0‫ و;د ﻡ‬،6 ‫ ﺙ‬D1`‫ ا‬7 0
‫ف أو‬,‫ * ﺡ‬6‫ار آ* ﺡ;ﺙ‬73  7Y3 5‫ن ﺡ‬jD ;*  @0  ‫ أﻡ‬،J Y‫ ا‬CD ‫ا;د‬
.D ‫إﺽ‬
J3@ ‫ ذات ﻡ;ى‬D1`‫ و *  ﻡ‬،;* 6 ‫ آ‬D1`‫ ا‬7 3 ‫ ف‬0 jD ‫ا‬,
‫;د‬3 ‫ن ا; ف‬jD D ‫ﺽ‬U‫ف وا‬,‫ ا‬,10 ‫ ء‬0‫ وأﺙ‬، ;‫ أن `' إ ا‬H>3 .‫ ﺡ‬7 ‫أآ‬
،;* 6 ‫ آ ع ﺙ‬D1`‫اف ا‬7E‫ً ﻡ أ‬D7E ‫ً ;د‬1* ‫ا ا;ى ا;د‬,‫ ر ه‬E‫ إ‬CD |0 ‫و‬
‫م‬B*3@ ‫ا‬,‫ وه‬، ;* D ‫ف أو إﺽ‬,‫ ً آ* ﺡ;ث ﺡ‬E ‫ك * دًا أو ه‬73 ‫ ف‬0
.;‫  ا‬C ‫ ا‬H>‫ ;د ا‬7( 7Y3‫ ﻡ‬7 0‫ﻡ‬

:(‫ ا‬#$ ‫ن‬%$&‫ا‬


*‫ ﺡ‬F* ‫ى‬3 '@‫   ل آ‬Y CD 50 ‫_ن‬U‫ ; أن ا;  ا‬N  ‫ﻡ‬
CD ;‫  ا‬C ‫ ا‬H>‫;; ا‬3 d 7Y3‫ وﻡ‬،;‫ ا‬7 0 ‫اء‬3‫ﺡ‬4 D1`‫ﻡ‬
+ ‫ أد‬d‫ آ ه ﻡﺽ‬D1`* ‫ا;ى ا;د‬

Const
Maxstack=100;
Type
Stack=record
Item:array[1..maxstack] of integer;
Top:0..maxstack;
End;
Var
S:stack;

‫ن‬: Maxstack ‫ و‬0  Integer ‫ع‬0‫ أن ن ﻡ ا‬J top ‫ن ا‬jD d‫وآ ه واﺽ‬
‫ ﺙ_ﺙ‬F* ‫ى‬3 ;‫ أن ا‬F0 ‫ا‬,5D Top=3 6 ‫_ إذا آ‬ ً =D،;‫ > ا‬H>‫ ;د ﻡ‬53>
‫ن ا‬jD ،;‫ ﻡ ا‬Pop ‫ف‬,‫;ﻡ ;ث * ﺡ‬0‫ و‬item[1],item[2],item[3] 7 0
item[4]‫ و‬،4 F‫داد ا‬B ‫ن ا ف‬jD push D ‫ * إﺽ‬6‫ أﻡ إذا ﺡ;ﺙ‬،2 F‫ إ‬7Y3 TOP
.D ‫ إﺽ‬6 ‫ي‬,‫ ا;; ا‬7`0‫ > ا‬,( ‫ف‬
‫ل‬4;34‫ ا‬HO3@ ;>‫ و‬،7`0 ‫ أ‬C* ‫ى‬3 4  ?‫ ﻡ > ' أن ا; ا‬0* ;
;‫;ا<)ﻡ‬34‫ ا‬53 ‫ ﺡ‬CD ;‫و' ا‬،71`* ‫ ﻡ@ و‬top ‫;ﻡ ن ا‬0 W‫ ذ‬C*
HO3@ z*3‫;ﻡ ن ا; ﻡ‬0D '= ‫ و‬.71`* ‫ ﻡ@ وي‬Top ‫ ' ا‬0 jD ،( (
.maxstack 6 =* ‫ ﻡ@ و‬top ‫;ﻡ ن ا‬0 W‫ ذ‬C* ‫ل‬4;34‫ا‬

DataStrcture 10 ‫ب‬ ‫ا‬/‫أ‬


:Empty ‫اا‬
H‫ﺝ‬7 C3‫ و ا‬empty‫?;م ا;ا‬3@ 0 jD،4 ‫ ا; (  أم‬6 ‫ ر ﻡ إذا آ‬3(4
W‫ ذ‬7{ 6 ‫ إذا آ‬False ‫و ا‬،  ( ;‫ ا‬6 ‫ إذا آ‬true ‫ا‬

Function empty(s:stack):boolean;
Begin
If s.top=0 then
Empty:=true
Else
Empty:=false;
End;

:C b ‫ آ‬C@<7‫ ا‬Q‫ ﻡ‬7 ‫ ا‬CD ‫ ر‬3(4‫ ا‬.3‫و‬

If empty(s) then
Writeln(‘the stack is empty’)
Else
Writeln(‘the stack is not empty’);

:Full ‫اا‬
z*3‫ ا; ﻡ‬6 ‫ إذا آ‬true ‫ ا‬H‫ﺝ‬73D 4 ‫ أم‬z*3‫ ا; ﻡ‬6 ‫ ر ﻡ إذا آ‬3(4 C‫وه‬
.W‫ ذ‬7{ 6 ‫ إذا آ‬false ‫وا‬

Funciton full(s:stack):Boolean;
Begin
If s.top=maxstack then
Full:=true
Else
Full:=fal se;
End;

:C 4 ‫ آ‬C@<7‫ ا‬Q‫ ﻡ‬7 ‫ ا‬CD ‫ ر‬3(4‫ ا‬.3 ‫و‬

If full(s) then
Writeln(‘the stack is full’)
Else
Writeln(‘the stack is not empty’);

:(‫ ا‬#" ‫ف‬J‫ﺥ ارز" ا‬


 ,10 CD 73‫ (  ا‬7{ 6 ‫ذا آ‬jD،4 ‫ ا; (  أم‬6 ‫ ر ﻡ إذا آ‬3(‫ ا‬.1
.‫ دى‬0‫ ا‬Q‫ ﻡ‬7 ‫ ا‬F‫ إ‬H‫ رﺝ‬D 4‫وإ‬،‫ات‬O?‫ا‬
. ;‫ > ا‬CD H ‫ي‬,‫ ا‬7`0‫ف ا‬,‫ اﺡ‬.2
.(Top) ;‫ح واﺡ; ﻡ > > ا‬7E‫ ا‬.3
.‫ دى‬0‫ ا‬Q‫ ﻡ‬7 ‫ ا‬C‫وف إ‬,‫ ا‬7`0‫ ا‬H‫ ارﺝ‬.4

DataStrcture 11 ‫ب‬ ‫ا‬/‫أ‬


Function Pop(var s:stack):integer;
Begin
If empty(s) then
Writeln(‘stack underflow’)
Else
Begin
Pop:=s.item[s.top];
s.top:=s.top-1;
End;
End;

J3 C@<7‫ ا‬Q‫ ﻡ‬7 ‫ ا‬CD ‫ ا;ا‬+,‫ داة ه‬0 ‫و‬

X:=empty(s);

:(+ M&‫ ا‬+($


‫ات‬O?‫ ا‬,10 CD 73‫ ا‬z*3‫  ﻡ‬. ‫إذا‬،4 ‫ أم‬z*3‫ ا; ﻡ‬6 ‫ إذا آ‬7 3(‫ ا‬.1
.‫ دى‬0‫ ا‬Q‫ ﻡ‬7 * H‫ رﺝ‬D 4‫وإ‬
. ;‫ > ا‬C‫ أﺽ واﺡ; إ‬.2
.;‫ > ا‬C‫ إ‬3D ‫اد إﺽ‬7‫ ا‬7`0‫; ا‬0‫ أ‬.3

Pocedure push(var s:stack; x:integer);


Begin
If full(s) then
Writeln(‘stack overflow’)
Else
Begin
s.top:=s.top+1;
s.item[s.top]:=x;
End;
End;

C 3 ‫_ آ‬
ً ‫ ا; آ ﻡ‬Q‫ ﻡ‬7 d ` *‫و‬

Const
Maxstack=100;
Type
Stack=record
Item:array[1..maxstack] of integer;
Top:0..maxstack;

DataStrcture 12 ‫ب‬ ‫ا‬/‫أ‬


End;
Var
S:stack;
Function empty(s:stack):boolean;
Begin
If s.top=0 then
Empty:=true
Else
Empty:=false;
End;
Function full(s:stack):Boolean;
Begin
If s.top=maxstack then
Full:=true
Else
Full:=false;
End;
Function Pop(var s:stack):integer;
Begin
If empty(s) then
Writeln('stack underflow')
Else
Begin
Pop:=s.item[s.top];
s.top:=s.top-1;
End;
End;
Procedure push(var s:stack; x:integer);
Begin
If full(s) then
Writeln('stack overflow')
Else
Begin
s.top:=s.top+1;
s.item[s.top]:=x;
End;
End;

begin
end.

DataStrcture 13 ‫ب‬ ‫ا‬/‫أ‬


‫ ت  ات‬
‫ ﻡ‬53 E‫ ل ﺝ* و‬3‫ ا‬-1
;‫ً أﺡ‬2‫د( ل أ‬U‫ ح ا‬31‫ وﻡ‬، Enter ‫ ح‬31 ‫?;م‬3@‫ ا‬xY‫ ﺽ‬F3‫وف ﺡ‬7‫ ل ا‬3  W‫ ذ‬.3
W, 13 ‫ ه‬C ‫ة‬71R J@ >‫ ور‬،‫ف‬7‫ أ ﺡ‬F*  3‫ و ا‬d 1‫رﻡز ﺡ ا‬
 3‫ ا‬7O  *‫ار ا‬734 13 .>‫ف ر‬7‫ ﻡ إذا آ ن ا;(' ه ا‬7 3?
while ch<>chr(13) do
begin
push(S,ch);
read(ch);
end;

Cb‫_آ‬
ً ‫ آ ﻡ‬Q‫ ﻡ‬7 ‫ ا‬d `‫و‬
uses crt;
Const
Maxstack=100;
Type
Stack=record
Item:array[1..maxstack] of char;
Top:0..maxstack;
End;
Var
S:stack;
ch: char;

Function empty(s:stack):boolean;
Begin
If s.top=0 then
Empty:=true
Else
Empty:=false;
End;
Function full(s:stack):Boolean;
Begin
If s.top=maxstack then
Full:=true
Else
Full:=false;
End;
Function Pop(var s:stack):char;
Begin
If empty(s) then

DataStrcture 14 ‫ب‬ ‫ا‬/‫أ‬


Writeln('stack underflow')
Else
Begin
Pop:=s.item[s.top];
s.top:=s.top-1;
End;
End;
Procedure push(var s:stack; c:char);
Begin
If full(s) then
Writeln('stack overflow')
Else
Begin
s.top:=s.top+1;
s.item[s.top]:=c;
End;
End;

begin
clrscr;
read(ch);
while ch<>chr(13) do
begin
push(S,ch);
read(ch);
end;

while not empty(S) do


begin
ch:=pop(s);
write(ch);
end;

Readln
end.

DataStrcture 15 ‫ب‬ ‫ا‬/‫أ‬


‫‪ 7 0 ' -2‬ﻡ; إ‪ F‬ﻡ; أ(‪7‬ى دون ا‪_(U‬ل  ‪J 73‬‬

‫)ف ن `رة ‪ ' S‬إ‪ 7 0 5‬ا; ‪ temp‬إذن ‪ ;4‬ﻡ وﺝد ﻡ; ﻡ‪3>f‬‬
‫ﻡ آ ه ﻡ  أد ‪(+‬‬

‫و‪3‬ن ﻡ ﻡ‪ S1 7 0 H‬إ‪ F‬ا; ‪ temp‬و م ‪ 7 0 '0‬ا; ا‪3>f‬‬


‫‪ .‬و ` ‪ ,<;0 d‬ا; ﻡ‪ 0‬ﻡ ‪ S‬وﻡ‪  7‬ﻡ‪ 7 0 H‬ا; ‪temp‬ا; ا‪3>f‬‬
‫وه ﺽ‪ d‬ا‪*O‬ب ‪ S1‬إ‪ F‬ا; ‪S‬ا;‬

‫‪DataStrcture‬‬ ‫‪16‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ !  ا ا‬S ‫ او‬ ‫ اءة ا‬
ً ‫و أو‬
for i:=1 to 10 do
begin
write('Enter Number into stack : ');
readln(no);
push(S,No);
end;

‫ !  ا ا‬Temp  ‫ إ ا‬S  ‫ﺹ ا‬#! $% ً%&
while not empty(S) do
begin
No:=pop(s);
push(Temp,No);
end;

S1  ‫ إ ا‬Temp  ‫ﺹ ا‬#! $% ً(&


while not empty(Temp) do
begin
No:=pop(Temp);
push(S1,No);
end;

‫ !  ا‬S1  ‫ﺹ ا‬#! ‫وأ*ًا !ض‬


while not empty(S1) do
write(pop(S1):7);

DataStrcture 17 ‫ب‬ ‫ا‬/‫أ‬


+
ً ‫ آﻡ‬.‫ﻡ‬%/‫ ا‬0/ ‫و‬

uses crt;
Const
Maxstack=100;
Type
Stack=record
Item:array[1..maxstack] of integer;
Top:0..maxstack;
End;
Var
S,S1,Temp:stack;
i,No: integer;

Function empty(s:stack):boolean;
Begin
If s.top=0 then
Empty:=true
Else
Empty:=false;
End;
Function full(s:stack):Boolean;
Begin
If s.top=maxstack then
Full:=true
Else
Full:=false;
End;
Function Pop(var s:stack):integer;
Begin
If empty(s) then
Writeln('stack underflow')
Else
Begin
Pop:=s.item[s.top];
s.top:=s.top-1;
End;
End;
Procedure push(var s:stack; x:integer);
Begin
If full(s) then
Writeln('stack overflow')
Else

DataStrcture 18 ‫ب‬ ‫ا‬/‫أ‬


Begin
s.top:=s.top+1;
s.item[s.top]:=x;
End;
End;

begin
clrscr;
for i:=1 to 10 do
begin
write('Enter Number into stack : ');
readln(no);
push(S,No);
end;
while not empty(S) do
begin
No:=pop(s);
push(Temp,No);
end;

while not empty(Temp) do


begin
No:=pop(Temp);
push(S1,No);
end;

while not empty(S1) do


write(pop(S1):7);

Readln
end.

 ‫ وزن ااس دا ا  ا‬#$ -3


‫ إ أن‬$ % 2#‫ وﻡ‬34‫ ا‬/5‫ ا‬$*‫ دا‬7 ‫ ; ﺏ اس ا  ﺡ وا‬3#5‫ ه<ا ﻡ‬#  ‫و‬
‫ و ﻡ وزن‬. ")" 7‫  س ﻡ‬B‫  س ﻡ  ح "(" ﺏ‬$‫ ا اس ﻡ زون إذا آن آ‬A4‫و‬
:‫ ارزﻡ ا‬E‫م ا‬GEH% /5‫ا‬
‫ﺱ وف‬GN‫ ﺹ  ﻡ‬-1
P #‫ ﺏ‬3% ‫ ﺏ‬7‫ ﻡ‬A4‫ !  و‬Balanced ‫ ﻡ زون‬/5‫ا أن ا‬G/‫ ا‬3 ‫ ض‬% -2
True  ‫ ا‬$  ‫اﺱ‬
3Q‫ إذن  ﺏ‬G5‫ ا  ﺏ‬HH‫ ا‬B# ‫ و‬balanced /5‫ ﻡ دام ا‬-3
3‫ اأ اف ا‬-‫أ‬
‫ﺱ‬GN ‫ ﺏ‬B*‫ إذا آن اف  س ﻡ  ح أد‬-‫ب‬

DataStrcture 19 ‫ب‬ ‫ا‬/‫أ‬


3Q‫  ﺏ‬7‫ إذا آن  س ﻡ‬-‫ج‬
‫ﺱ‬GN ‫ – أ*ج أول   ﻡ ا‬a
balanced=false A4 * ‫ﺱ‬GN ‫ ا‬V%‫ إذا آ‬-b
A4 ‫ﺹ‬#! 2‫ إن آن ﺏ‬،‫ﺱ‬GN ‫ ا‬Y ‫ ا   ﺏ‬HH‫ ا‬2% G5‫ ﺏ‬-4
balanced=false

Balanced:=True;
read(ch);
while(Balanced) and (ch<>chr(13)) do
begin
if ch='(' then push(S,ch)
else if ch=')' then
begin
if empty(s) then Balanced:=False
else ch:=pop(s);
end;
read(ch);
end;
if not empty(s) then Balanced:=False;
if Balanced then writeln('Balanced Exepresion')
else writeln('Non Balanced Exepresion');

:3‫ ا‬$NZ‫ ﺏ‬+


ً ‫ آﻡ‬.‫ﻡ‬%/‫ ا‬0/   #‫ﺏ‬
uses crt;
Const
Maxstack=100;
Type
Stack=record
Item:array[1..maxstack] of char;
Top:0..maxstack;
End;
Var
S:stack;
ch: char;
Balanced:boolean;
Function empty(s:stack):boolean;
Begin
If s.top=0 then
Empty:=true
Else
Empty:=false;
End;
Function full(s:stack):Boolean;

DataStrcture 20 ‫ب‬ ‫ا‬/‫أ‬


Begin
If s.top=maxstack then
Full:=true
Else
Full:=false;
End;
Function Pop(var s:stack):char;
Begin
If empty(s) then
Writeln('stack underflow')
Else
Begin
Pop:=s.item[s.top];
s.top:=s.top-1;
End;
End;
Procedure push(var s:stack; c:char);
Begin
If full(s) then
Writeln('stack overflow')
Else
Begin
s.top:=s.top+1;
s.item[s.top]:=c;
End;
End;

begin
clrscr;
Balanced:=True;
read(ch);
while(Balanced) and (ch<>chr(13)) do
begin
if ch='(' then push(S,ch)
else if ch=')' then
begin
if empty(s) then Balanced:=False
else ch:=pop(s);
end;
read(ch);
end;
if not empty(s) then Balanced:=False;
if Balanced then writeln('Balanced Exepresion')

DataStrcture 21 ‫ب‬ ‫ا‬/‫أ‬


else writeln('Non Balanced Exepresion');

Readln
end.

Infix And Postfix -3


/] 3#5 ‫ وه<ا‬A+B 3‫ ا‬34‫ ا‬/5‫ ا‬/5% #%\ A , B 7 ‫ ا‬A [ G% ‫ﻡ‬G#!
*‫^  أ‬#‫ ه‬N‫ و‬Infix  H $( ‫ وه<ا ا‬B ‫ و‬A ‫ﻡ‬5 ‫" ! ا‬+"  5‫ا‬
: ‫ ه‬/5‫ ذ^ ا‬$( 
+AB prefix
AB+ postfix

$ ‫ ا‬A]H ‫ ﺡ‬4‫ ت ا‬5‫ ا‬3%5‫ ﻡ‬H  3 ]‫م اﺱ ب ه ا‬GEH‫و‬
،ً‫`زه أو‬%‫ إ‬37/# ‫ ت‬5‫ أي ا‬2 ! G 5 4‫ﺏ ا‬5‫ ا‬H  ‫ﺏ او ت ن‬
3 ‫ ا*ن‬2/‫ ﺡ إن ﺱ‬A `‫ ! ت ا]ح وا‬/H  H‫ب وا‬b‫آ (ل \ن ! ت ا‬
.A `‫ ا‬$/ ‫ب‬b‫ < !  ا‬# #‫ ه‬c` (A+B*C) /5‫ ا‬/!‫ ا‬2 ‫ و‬c‫ا‬
‫ س‬3  ً ‫ب أو‬b‫ !  ا‬$ % #%\ Postfix ‫ إ‬f+!‫ أ‬/5‫ ا‬$  %‫وإذا أرد‬
Ab% & A+(BC*)  ً ‫ أو‬g`# 2%‫ﺵرة إ أ‬i  2‫ب أﻡﻡ‬b‫ﻡ ا‬+! Ab% & A+(B*C)
B%‫ أ‬jZN% ‫ ا ﺡ‬f<‫ ه‬G#!‫ و‬A(BC*)+ ‫ب  ا!ة او ت‬b‫ !  ا‬G5‫ ﺏ‬A `‫!  ا‬
‫ او ت‬3!‫ وا‬Postfix 7 ‫ًا ﺏ‬g‫ [ه‬0/‫ أﺹ‬/5‫ اس ن ا‬k ‫^ داع‬#‫ ه‬N 
ABC*+
/] !‫ ت ذات او  ا‬5‫ أن ا‬3‫ ه‬Postfix ‫ إ‬Infix ‫ ﻡ‬$  ‫ة‬G‫ة ا ﺡ‬G!‫وا‬
 ‫ أن‬c` ‫ ا اس‬$*‫ا‬G‫ﺏ ﺏ‬5‫ إ أن ا‬B/#% ‫ أن‬c` #‫ وه‬،$‫ ت ذات او  ا‬5‫ ا‬$/
‫ ت *رج ا اس‬5‫ ﺏ‬2]‫ﺏ‬% ‫ أن‬$/ 
ً ‫أو‬

Infix Postfix
A+B AB+
A+B-C AB+C-
A+B/C ABC/+
A*(B+C) ABC+*
(A+B) / (C-D) AB+CD-/
A/B*C-D+E/F*(G+H) AB/C*D-EF/GH+*+
A-B/(C+D) ABCD+/-

DataStrcture 22 ‫ب‬ ‫ا‬/‫أ‬


Queues ‫اف‬
:!‫ی ا‬
7`0‫ ا‬CD 4‫*  ا; ت إ‬3? 4‫ و‬O( ،O( 7O p1 7 0‫ه > < ﻡ ا‬
‫ف‬7 ‫*ب‬:‫ا ا‬,‫ً وه‬2‫ف(أ‬,‫اج )ا‬7(U‫ ا‬CD ‫ول‬:‫ ا‬7`0‫د( ل ه ا‬U‫ ا‬CD ‫ول‬:‫ا‬
7 0‫ف ا‬,‫ أن ﺡ‬F0 ‫ا‬,‫ وه‬،‫ ا  ت‬F‫ ال إ‬CD First In First Out (FIFO) ‫ *ب‬
‫ف‬7O‫ ﻡ ا‬.3 2‫ أ‬7 0‫ ا‬D ‫ وإﺽ‬، Front ‫أس‬7‫ ا;ﻡ أو ا‬F@‫ف واﺡ; و‬7E ‫ ﻡ‬.3
. Rear ‫ة‬7(f‫' أو ا‬,‫ ا‬F@ ‫ي‬,‫ ا‬7(b‫ا‬
: 3‫ ل ا‬R:‫ ﻡ' ا‬3 0‫ة ا` د‬7D d‫ﺽ‬3

front
front

Rear
Rear
2 1

front front

C B A B A

Rear Rear
4
3

front front

C C B

Rear Rear
5
6

front

Rear
7
DataStrcture 23 ‫ب‬ ‫ا‬/‫أ‬
'l‫ ا‬CD ‫ و‬، ‫ة‬7(f‫أس و ا‬7‫ > ا‬D ‫@ وى‬3 C (  0; ; 1  ‫ ا‬CD
O0‫ ا‬F‫ إ‬7Rf Rear > ‫ و ز دة‬Rear ‫ة‬7(f‫ ﻡ ن ا‬CD A 7`0‫ ا‬D ‫ إﺽ‬6 2
F‫ إ‬7( 7`0 D ‫ إﺽ‬6 4 'l‫ ا‬CD ‫ و‬، 3D ‫ إﺽ‬6 7`0 7( O0‫ ﻡ‬C* C3‫ا?  ا‬
7`0‫ ﻡ ن ا‬C* ‫ي‬,‫ ا‬C ?‫ ا ن ا‬F‫ إ‬7Rf 3> ‫ ا;; و ز دة‬Rear ‫ ﻡ ن‬CD `‫ا‬
‫ف‬,‫ و آ ن ﺡ‬،`‫ ﻡ ا‬D,‫ ﺡ‬. ;> 7`0 ‫ ك‬0‫ ; أن ه‬5 'l‫ ا‬CD‫ و‬، 3D ‫ إﺽ‬6 ‫ي‬,‫ا‬
‫ة‬O( Front 7Rf‫ك ا‬7 ‫و‬،A 7`0‫ف ا‬,‫ ﺡ‬. W,،‫ ﻡ ا;ﻡ‬.3 `‫ ﻡ ا‬7 0‫ا‬
‫ ﻡ‬7( 7`0 ‫ف‬,‫ ﺡ‬. 6  ‫ ا‬CD ‫ و‬، ‫ ا;ﻡ‬CD b 7`0‫ ا‬d ` W, ‫ﻡ م و‬:‫ ا‬C‫إ‬
‫ ; أن‬7  ‫ ا‬CD W,‫ و آ‬، ‫ ا;ﻡ‬CD C d `3 ‫ى‬7(‫ة أ‬O( Front 7Rf‫ا` و ;م ا‬
‫ ﻡ ن واﺡ; و‬CD Rear H‫ ﻡ‬d ` ‫ى‬7(‫ة أ‬O( Front 7Rf‫ و ;م ا‬D,‫ ﺡ‬. 7( ‫ُا‬7`0
.;;‫ ﻡ ﺝ‬C ( `‫ ا‬d `
First In ‫` رًا‬3(‫( ا‬FIFO) ‫دة‬7‫ ل ا  ت ا‬R‫' ﻡ أ‬l‫ا ا‬,‫ ه‬F@ J @‫ا ا‬,5‫و‬
.First Out

:Queue Operations ‫ت ا! ف‬+($


D ‫ﺽ‬U‫ ا‬F‫وه‬، * ‫اؤه‬7‫ * ت  إﺝ‬H‫ ك أر‬0‫ن ه‬jD q `‫ ا‬0; 
‫ف‬,‫ و* ا‬، Q `‫ة ا‬7(f‫ ﻡ‬F‫ إ‬X 7`0‫ ا‬D ‫ إﺽ‬.3 5D‫و‬،Insert(q,x)
X CD ‫ ووﺽ‬Q `‫ ﻡ;ﻡ ا‬CD H ‫ي‬,‫ ا‬7`0‫ف ا‬,‫ ﺡ‬.3 5D‫ و‬X:=remove(q);
‫ و‬،ً  ( `‫ إذا آ ن ا‬True ‫ ا‬H‫ﺝ‬7 ‫ و‬،`‫ ا‬r1 ‫ م‬F‫ وه‬Empty(q) *‫و‬
‫ ا‬H‫ﺝ‬7 ‫ و‬،`‫ ا‬r1 ‫ م‬C‫ وه‬Full(q) *‫ًا ا‬7(‫ وأ‬، W‫ ذ‬7{ ‫ إذا آ ن‬False
.W‫ ذ‬7{ ‫ إذا آ ن‬False‫ و‬، ًz*3‫ إذا آ ن ا` ﻡ‬True
،‫ >د‬7{ ‫اؤه ﻡ‬7‫  إﺝ‬D ‫ﺽ‬U‫ن * ا‬jD ، `‫ ا‬. ;‫ ﺡ‬W 0‫  ه‬. ‫إذا‬
،‫ل‬
ٍ ( ِ  C* ‫اؤه‬7‫ إﺝ‬. ‫و إذا‬.xD ً ( `‫  ا‬. ‫اؤه إذا‬7‫ إﺝ‬.3D ‫ف‬,‫أﻡ * ا‬
،/ ‫ أي‬CD ‫اؤه‬7‫  إﺝ‬Empty * ‫ أن‬d‫ وﻡ ااﺽ‬Underflow ‫ ن‬30‫ن ا‬jD
.Full * W,‫و آ‬

:!‫ ا‬#$ ‫ن‬%$&‫ا‬


K D ‫ ; إﺽ‬W‫ و ذ‬، ‫   ل‬Y CD `‫=' ا‬3 D1`‫?;م ا‬3@ ‫ف‬
‫ و‬front 7Y3‫?;م ﻡ‬3@ ‫ و ف‬، `‫ف ﻡ ا‬,‫ و ا‬D ‫ﺽ‬U‫ * ا‬. C3‫ ا‬x‫ا‬2‫ا‬
‫ول‬:‫ ا‬7`0‫ ا‬H>‫ ﻡ‬F‫ إ‬front 7l 8 ، `‫ ا‬CD 7(:‫ول و ا‬:‫ ا‬7`0‫;; ا‬3 Rear
Rear H>‫ أي أن ﻡ‬، `‫ ا‬CD ‫ ًة‬7R ‫ ﻡ‬7(:‫ ا‬7`0‫ (* ا‬H ‫ي‬,‫ ا‬H>‫ ا‬F‫ إ‬Rear ‫و‬
-:C 3 ‫;اد ا`  =* آ‬:‫ن  ﻡ ا‬jD C 3  ‫ و‬، ً‫ن ( ً دوﻡ‬

Const;
MaxQueue = 5;
Type
Queue=Record
item : array[1..MaxQueue]of integer;
Front,Rear:1..MaxQueue;
End;

. OverFlow ‫_ء ا` و ﺡ;وث‬3‫ اﻡ‬CD J @3 ‫ ﻡ‬7 0‫ ﻡ;ودة ا‬D1`‫ أن ا‬7‫آ‬, ‫و‬

DataStrcture 24 ‫ب‬ ‫ا‬/‫أ‬


: Empty ‫اا‬
‫ أي أن ا` ن‬، `‫ة ا‬7(f‫ ف ن ( ً دوﻡ ً و ه =' ﻡ‬Rear 7Y3‫ا‬
:C 3 ‫ آ‬empty *‫  =' ا‬W, ‫ و‬Front = Rear ‫( ً إذا آ ن‬

function Empty(q:Queue):Boolean;
begin
if q.Front =q.Rear then Empty:=True
else Empty:=False;
end;

: Full ‫اا‬
7( C* ‫ي‬,‫ ا‬H>‫ ا‬F‫ إ‬7l Rear ‫ة‬7(f‫ ا‬7Rf‫ً إذا آ ن ﻡ‬z*3‫ن ا` ﻡ‬
. 1 + D1`‫ أي ﺡ; ا‬، D1`‫ ا‬3 ‫  أن‬7`0

function Full(q:Queue):Boolean;
begin
if q.Rear=MaxQueue+1 then Full:=True
else Full:=False;
end;

: !‫ ا‬#" ‫ف‬J‫ ا‬+($


.3 W‫ آ; ﻡ أن ا` ] ( ً و ; ذ‬3‫ ا‬4 ً ‫ أو‬JD `‫ ﻡ ا‬7`0 ‫ف‬,‫; ﺡ‬0
;‫ ا;ﻡ اﺡ‬7Rf‫ ز دة > ﻡ‬.3 .‫ ﺙ‬Front ‫ ا;ﻡ‬H>‫ ﻡ‬CD ‫ اﺝد‬7`0‫ف ا‬,‫ﺡ‬
-:C 3 ‫ف آ‬,‫و  =' * ا‬

Function Remove(var q:Queue):integer;


begin
if Empty(q) then writeln('Queue UnderFlow');
else
begin
Remove:=q.item[q.Front];
q.Front:=q.Front+1;
end;
end;

-:M&‫ ا‬+($
D ‫ إﺽ‬.3 W‫ ; ذ‬.‫ً ﺙ‬z*3‫ آ; ﻡ أن ا` ] ﻡ‬3‫ ا‬4
ً ‫ أو‬J 7`0 D ‫; إﺽ‬0
7Rf‫ ا‬W‫ ز دة > ذ‬.3 ‫ و‬Rear ‫ة‬7(f‫ ا‬7Rf‫ إ ﻡ‬7Rf ‫ي‬,‫ ا‬H>‫ ا‬CD 7`0‫ ا‬W‫ذ‬
C ( ‫ ﻡ ن‬F‫ إ‬7Rf ;‫;ار واﺡ‬
-:C 3 ‫ آ‬5*=  ‫و‬

DataStrcture 25 ‫ب‬ ‫ا‬/‫أ‬


Procedure Insert(var q:Queue;X:integer);
begin
if Full(q) then writeln('Queue OverFlow')
else
begin
q.item[q.Rear]:=X;
q.Rear:=q.Rear+1;
end;
end;

.5 O‫ أر> م و‬5 ' 3@ ‫ي‬,‫ ا‬Q‫ ﻡ‬7 ‫ا ا‬,‫ ه‬N O  `‫ ا‬Q‫ ﻡ‬7 ‫ ر‬3(4 ‫و‬

uses crt;
Const
MaxQueue = 5;
Type
Queue=Record
item : array[1..MaxQueue]of integer;
Front,Rear:1..MaxQueue;
End;

function Empty(q:Queue):Boolean;
begin
if q.Front =q.Rear then Empty:=True
else Empty:=False;
end;

function Full(q:Queue):Boolean;
begin
if q.Rear=MaxQueue+1 then Full:=True
else Full:=False;
end;

Function Remove(var q:Queue):integer;


begin
if Empty(q) then writeln('Queue UnderFlow')
else
begin
Remove:=q.item[q.Front];
q.Front:=q.Front+1;
end;
end;

DataStrcture 26 ‫ب‬ ‫ا‬/‫أ‬


Procedure Insert(var q:Queue;X:integer);
begin
if Full(q) then writeln('Queue OverFlow')
else
begin
q.item[q.Rear]:=X;
q.Rear:=q.Rear+1;
end;
end;

var
q:Queue;
No,i:integer;

begin
clrscr;
q.rear:=1;
q.front=1
writeln('Enter 5 Numbers');
for i:=1 to 5 do
begin
write('Enter No ',i,' : ');
readln(No);
Insert(q,No);
end;

writeln('The Numbers you Entered is :');

while not empty(q) do


begin
writeln(Remove(q));
end;
readln
end.

DataStrcture 27 ‫ب‬ ‫ا‬/‫أ‬


Circular Queue ‫ا" اا! ي‬
‫_ء ا ذب‬3 ‫ﻡ‬4‫ ا‬C ‫ة و ه‬7Y  *l ‫ت ﻡ‬7 5†  @ ‫  ا‬7O  ` * 0 O C D
‫ ﻡ‬7 0‫ ا‬H‫ف ﺝ‬,‫ ﺡ‬. 8‫ف ﺡ‬1`‫ ﺡ  أﺡ; ا‬d‫ و ه ﺽ‬+ ‫ أد‬.7‫ ﻡ=_ ا‬,( ، `*
‫ أي‬D ‫ إﺽ‬HO3@ 4 0 ‫ أ‬4‫ ر{ إ‬D ‫ة‬7=‫ ﻡ وﺝد أﻡ آ آ‬.{7   ‫ و‬، 7(:‫ ا‬7`0‫;ا ا‬
‫_ء‬3‫ﻡ‬4‫ط ا‬7l ً‫ف ﻡ‬1`‫  ا‬5 CD ‫ ﻡﺝد‬Rear 7Rf‫ن ا‬: ، 7`0

front

Rear

‫ي و ه  *  ا @ ح‬7<‫   ` ا ;ا‬F@  ‫ ر ﻡ‬3‫ ا‬. *l ‫ ا‬+, ‫و  ' ه‬


`‫ ر أن ا‬3  *‫ ا‬+,‫ ه‬.3 ‫ و‬. ‫ رغ‬D ‫; وﺝد أي ﻡ ن‬0 D1`‫ ا‬CD 7 0‫ ا‬B?3
.3  3‫ ;ا‬F ‫ * إ‬.3  ` ‫   ا‬5 C‫ة إ‬7(f‫ ا‬7Rf‫; ول ﻡ‬0 ‫ أي‬،‫ة‬7<‫ رة  دا‬
‫ ا;ﻡ‬7Rf  @0  ‫] ا ل‬1 ‫د( ل ﻡ ا ;ا و‬U‫ا‬
C 3‫' ا‬l  d `3 ‫_ء‬3‫ﻡ‬4‫ ;' دا ا‬F‫ ج إ‬30 ‫ي‬7<‫ ا` ا;ا‬W‫و' ذ‬

if (q.Rear+1) mod (MaxQueue+1)= q.front then Full:=True

`‫  ا‬5 F‫ة إ‬7(f‫ ا‬7Rf‫ إذا و' ﻡ‬F3‫ ﺡ‬7 0‫ ا‬D ‫ إﺽ‬HO3@3 D ‫ﺽ‬U‫و دا ا‬
C 3‫;' ا‬3‫اء ا‬7‫ﺝ‬j W‫وذ‬

q.Rear:= (q.Rear+1) mod (MaxQueue+1);

-:C 3‫' ا‬l  d `3 ً2‫ف أ‬,‫ ; ﻡ ;' دا ا‬4 '   ‫و‬

q.Front:=(q.Front+1) mod (MaxQueue+1);

-:C* ‫_ آ‬
ً ‫ آ ﻡ‬Q‫ ﻡ‬7 ‫ ا‬r  3‫و آ‬

uses crt;
const
MaxQueue = 5;
Type

DataStrcture 28 ‫ب‬ ‫ا‬/‫أ‬


Queue=Record
item:array[1..MaxQueue]of integer;
Front,Rear:1..MaxQueue;
end;

function Empty(q:Queue):boolean;
begin
if q.Front =q.Rear then Empty:=True
else Empty:=False;
end;

function Full(q:Queue):boolean;
begin
if (q.Rear+1) mod (MaxQueue+1)= q.front then Full:=True
else Full:=False;
end;

Function Remove(var q:Queue):integer;


begin
if Empty(q) then writeln('Queue UnderFlow')
else
begin
Remove:=q.item[q.Front];
q.Front:=(q.Front+1) mod (MaxQueue+1);
end;
end;

Procedure Insert(var q:Queue;X:integer);


begin
if Full(q) then writeln('Queue OverFlow')
else
begin
q.item[q.Rear]:=X;
q.Rear:= (q.Rear+1) mod (MaxQueue+1);
end;
end;

var
q:Queue;
No,i:integer;

DataStrcture 29 ‫ب‬ ‫ا‬/‫أ‬


begin
clrscr;
q.Rear:=1;
q.Front:=1;
writeln('Enter 10 Numbers');
for i:=1 to 5 do
begin
write('Enter No ',i,' : ');
readln(No);
Insert(q,No);
end;
Insert(q,11);

writeln('The Numbers you Entered is :');

for i:= 1 to 6 do
begin
writeln(Remove(q));
end;

writeln('Enter 10 Numbers');
for i:=1 to 5 do
begin
write('Enter No ',i,' : ');
readln(No);
Insert(q,No);
end;
Insert(q,11);

writeln('The Numbers you Entered is :');

for i:= 1 to 6 do
begin

writeln(Remove(q));
end;
readln
end.

Pointers ‫ ات‬#$‫ا‬
‫ة ذو ع  ت‬7‫اآ‬,‫ ا‬CD 7( 7Y3‫ان ﻡ‬0 ‫ا ي‬7Y3‫ ;ّد ﻡ‬pointer 7ّRf‫ع ﻡ‬
. > F ‫ إ‬7l  ‫ة‬7 R ‫ ﻡ‬7 {  7O ‫ و‬7 Rf‫ ا‬7 Y3‫ن ﻡ‬j D ‫ا‬,  .(‫ ﻡ ;د‬7 { ‫ﻡ ;د )أو ع‬

DataStrcture 30 ‫ب‬ ‫ا‬/‫أ‬


. W ‫ ﻡ  ذ‬4;   ( D7‫' ﺡ‬3@  0‫ و‬، 0‫ ﺡ ﻡ‬31‫م آ* ﻡ‬B*3@ 4 7ّRf‫ ع ﻡ‬7
caret (^): ‫دراج‬4‫ ا? ص ه _ﻡ ا‬B‫ﻡ‬7‫ف أو ا‬7‫ا‬

type
PointerToInt = ^Integer;

،‫ع‬0‫] ا‬1 ‫ ﻡ‬7( 7Y3 ‫ان ا? ص‬0‫  ا‬r`? ‫ أن‬W0 ،‫ا‬7Rf‫ا ﻡ‬7Y3‫ ﻡ‬6Dّ7  ‫ﺡ‬
@: '‫?;ام ا ﻡ‬3 

uses crt;
var
p:^integer;
x:integer;
begin
clrscr;
x:=20;
p:=@x;
write(p^);
readln
end.

‫ إ‬7l ‫ة‬7‫اآ‬,‫ ا‬CD H>‫ ﻡ‬F‫ إ‬7l 6 ‫ أ‬P 7 3‫ ا‬O‫ ا‬jD ، P 7ّRf‫ ا‬W; ‫;ﻡ ن‬0
‫ا‬,5. ‫ا‬,‫ة ه‬7‫اآ‬,‫ ا‬H>‫ ﻡ‬CD *1‫ ت ا‬3‫ ا‬F‫ إ‬7l 6 ‫ أ‬P^ 7 3‫ ا‬O‫ و ا‬،7Rf‫ا‬
P 7Y3‫ إ ا‬7Rf ‫ > ﻡ‬C0 ‫ أي‬X N O P^ ‫ن‬jD N @‫ ا‬3‫ ا‬CD J @‫ا‬

7Y3‫ان ا‬0 ' ‫ى‬7(‫ أو  رة أ‬x 7Y3‫ ا‬F‫ إ‬7Rf p 7Rf‫ أن ا‬C0 P=@X ‫اد‬
‫ة ا ب‬7‫ ذاآ‬CD x

‫ة‬7‫اآ‬,‫ ا‬CD ‫ ﻡ@ ﺡ ﺝ;;ة‬F‫ إ‬7l ‫ أن‬7Rf*  ،‫ة ﻡﺝد‬7‫ ذاآ‬H>‫ ﻡ‬F‫ رة إ‬RU‫ ﻡ ا‬4;
+,‫ ه‬CD New. <‫ا‬7‫ﺝ‬U‫ ا‬O‫ة( ا‬7‫اآ‬,‫ ا‬x‫ ﻡ ﻡ‬O0‫ ﻡ‬CD) ّ‫ `رة ﺡ‬5``? .3
، ‫ه‬B 6> C3‫ة ا‬7‫اآ‬,‫ ﻡ ا‬r*?3 ‫ أن‬2‫ أ‬W* ،7Rf* W3‫ ء ﺡ ﺝ‬53 ‫; ا‬0 ‫ و‬، ‫ا‬
Dispose . 1†‫; ء ا‬3 

uses crt;
var
p:^integer;
begin

DataStrcture 31 ‫ب‬ ‫ا‬/‫أ‬


clrscr;
new(p);
p^:=20;
write(p^);
dispose(p);
readln
end.

HO3@ ‫  ;ه‬،  ‫ء‬C R 4 nil  > r` ? W 0 ،> ‫ (  ﻡ أ‬7Rf‫إذا آ ن ا‬
7 R 3‫ن ا‬: ،‫'  دة‬3@  ‫ا‬, ‫ و ه‬. > F ‫ إ‬7l   ‫ إذا ﻡ ه ﺡ‬D7 7Rf‫ ر (* ّ ا‬3(‫ا‬
.(access violation) ‫ﻡ ا;(ل‬7 ‫ آ‬53 ‫ ا‬Jّ @ ‫ رغ‬D 7Rf ŠE ?‫ا‬

‫   رة‬x F ‫ إ‬7 Rf p ‫ذا آ ن‬j D 5 ‫ا‬7 Rf‫  ﻡ‬4; ‫ات‬7 Y3‫ ا‬F ‫ً ا ل إ‬2 ‫ أ‬
7 Y3‫ ا‬, ( d ‫ﺽ‬3*‫ و‬p^:=x  7O  p ‫ إ‬7 Rf ‫ > ﻡ‬C‫ ه‬x > d ` p:=@x
‫ ا= ل‬C D 12  ` 3 7 Rf‫  ا‬4; 5> 7{ .‫ ﺙ‬25 ‫ و‬15 3  ‫ ;ءا‬,‫ ا‬n ‫ و‬m
C 3‫ا‬

uses crt;
var
p:^integer;
m,n:integer;
begin
clrscr;
m:=15;
n:=20;
p:=@m;
p^:=12;
p:=@n;
p^:=12;
write('m =',m,' and
n=',n);
readln
end.

‫ًا‬7Y3‫ ﻡ‬7Rf‫ا?_ أن ا_ﻡ ^ ' ﻡ ا‬

1†‫ ' ا‬F‫ رة إ‬R‹ C 3‫ ا= ل ا‬,( 0‫ أ اع ا  ت و‬D  7Rf‫ ﻡ‬H2 ‫و أن‬

Type
Pemployee = ^Temployee;
Temployee = record
Name : string[10];
Position : char;

DataStrcture 32 ‫ب‬ ‫ا‬/‫أ‬


Salary : longint;
end;
var
p : pemployee;
begin
new(p);
p^.name:='Yassir';
p^.position:='S';
p^.salary:=3000;
writeln(p^.name,' ',p^.position,' ',p^.salary);
dispose(p);
end.

:‫ات  هآ? ات‬CO(‫"ﺥ? إ ا‬


Dynamic ‫ ﺏت "*آ‬-‫ ء ﺏ‬l ‫ إ‬CD ‫   ل‬Y ‫ ل‬3‫ ا‬1‫ آ‬C‫ إ‬0‫ض ه‬730
. Q‫ ﻡ‬7 ‫ ا‬,10 ‫ ء‬0‫ أﺙ‬Grow 0 5 ‫آ أي أ‬73‫ ﻡ‬0 ;` ‫و‬. Data Type
CD C‫ و ه‬Nodes ‫ ;ًا‬F@ 7 0‫آ  رة  ﻡ ﻡ ا‬73‫ ا  ت ا‬0 ‫و‬
.‫ات‬7Rf‫ ا‬O‫ ا‬K ‫ ا‬52  O 7‫ ﻡ‬Record ‫ا _ت‬
‫ ا  ت‬0 ‫ن‬jD ،7 0‫ ً ;د ﻡ;ود ﻡ ا‬B?‫' ﻡ‬l C3‫ ت ا‬D1`‫و ?_ف ا‬
Q‫ ﻡ‬7 ‫ ﺡ ﺝ ا‬F* W‫> ذ‬3‫ و‬،Q‫ ﻡ‬7 ‫ ا‬,10 ‫| (_ل‬0 ‫;د و‬3 ‫آ  أن‬73‫ا‬
‫ ﻡ@ ﺡ‬Allocate B‫ ﺡ‬.3 D1`‫_ن  ﻡ‬U‫; ا‬0 jD 7( F0 ‫ و‬،‫ ا  ت‬B?3
‫ ا@ ﺡ‬+,‫;  وز ه‬0 ‫ و‬، D1`‫?;ام ا‬3‫; ا‬0 ‫  وزه‬HO3@ 4 ‫ة‬7‫اآ‬,‫ﻡ;دة ﻡ ا‬
‫ن‬: ‫ات‬7Rf‫?;ام ا‬3‫; ا‬0 ‫ ;ث‬4  ‫ ا‬+,‫وه‬. Array Overflow *l F@ ‫;ث ﻡ‬
.‫ﺡ‬31‫ ﺡ ن ﻡ‬3‫ا@ ﺡ ا‬
‫ ﻡ= ل‬C‫ ﺡ‬.  CD 7Y3‫  ت دا< ا‬B?3 ‫?;م‬3@ ‫آ‬73‫ ا  ت ا‬0 ‫إن‬
 ‫  ت ﺝ;;ة‬D ‫' ﺝ;ًا إﺽ‬5@‫ ا‬D ،  ‫و‬7   5 ‫ آ أ‬، 7D @‫ > < ا‬W,
._ ً ‫  ;  ﻡﺝد  أ‬5 (‫ وإد‬، ‫ ء ;ة ﺝ;;ة‬l ‫ إ‬N7E

:PointerCO" ‫  ع‬#" G*(‫ وا‬New ‫رة‬$


N7E  D1`‫ ا‬7 0 ‫ة‬7‫اآ‬,‫ ا‬CD ‫ ﻡ ن‬B ‫ م‬0‫ آ‬،‫ ت‬D1`‫ ا‬CD
7 0 F`>:‫ ;; ا;د ا‬F* 0{7 H O  ‫ا‬,‫ وه‬،‫ ﻡ‬.‫ ذات ﺡ‬D1`‫_ن  ﻡ‬U‫ا‬
;‫أي ;د ا‬،0 ‫ ا‬W* .‫ ن ﺡ‬.‫ آ‬.* 4 0 jD ،‫آ‬73‫ ا  ت ا‬0  ‫ ﺡ‬CD D1`‫ا‬
7O‫ و‬. 5‫ إ‬03‫; ﺡ ﺝ‬0 ‫ة‬7‫اآ‬,‫ ا‬CD ‫ ﻡ ن *;ة‬B‫ ﺡ‬0* J W, ، 53 ‫ ف‬C3‫ا‬
.‫ ﻡ ن ;ة ﺝ;;ة‬B '3@ New ‫إن  رة‬، 0 ‫ ا‬C>  ‫ ا;ة‬W* x7 ‫ﻡ‬
F* 0; F*;‫ ا‬7Rf‫ ك ا‬0‫ ت آ ن ه‬D1`‫ ا‬CD ‫ة ﺝیة؟‬9$ ‫ء و ا*(ل‬T‫ إ‬--(‫آ ی‬
7Rf‫ ﻡ‬F@ ‫ات‬7Y3‫  ً ( ً ﻡ ا‬7D ‫   ل‬Y ‫ ; أن‬+,‫ ه‬03 ‫ ﺡ‬CD ‫ ا;ة‬W* ‫ﻡ ن‬
.Pointer
:‫ﻡ= ل‬

DataStrcture 33 ‫ب‬ ‫ا‬/‫أ‬


Type

Nodepointer=^node;
Node=record
Name:string;
Age:integer;
End;
Var
P,q,r:nodePointer;

Nodepointer ‫ع‬0‫ ﻡ ا‬7Rf‫ و  ﻡ‬Node ‫ع‬0‫_ ت *  ' ﻡ ا‬U‫ ا‬+,‫ه‬


‫ع‬0‫ات ﻡ ا‬7Rf‫ ﻡ‬5 ‫ أ‬F* D7‫ ﻡ‬R,Q,P ‫ات‬7Y3‫ا‬. Node ‫ع‬0‫ ا@_ت ﻡ ا‬F‫ إ‬7Rf
NodePointer
3*‫إن ا‬
New(p);
New(Q);
‫ع‬0‫ ﻡ ا‬P,Q ‫ أن‬8‫ و ﺡ‬P,Q ‫ات‬7Rf  5‫ ُر إ‬l‫ان أﻡ آ @* ﻡ‬B
‫ع‬0‫ أن ن ﻡ ا‬J –Q,P ‫ ب‬5‫ ر إ‬l‫ ا‬-‫ ا@_ت ا;;ة‬+,‫ن ه‬jD NodePointer
‫ان‬0 ‫ ا‬CD C‫ ه‬Pointer variable 7Rf‫ ﻡ‬7Y3‫ إن > ا‬،+ ‫ أد‬d‫ آ ه ﻡﺽ‬Node
5‫ إ‬7l C3‫ ا;ة ا‬+   .5 .7 7Rf‫ف =' ا‬.‫ة ;ة ﻡ;دة‬7‫اآ‬,‫ ا‬FD Address
0* C 3‫' ا‬l‫ ﺡل آ_ ا;  ا;;  و ا‬7 .3 . ‫ن‬b‫ ا‬C‫ أ إ‬p‫ﺡ‬4. 7Rf‫ا‬
ً1  + 0‫ﺡ‬7R ‫?' ﻡ‬3
P

:3*‫?;ام ا‬3‫  ا‬jD P,Q 7Rf  5‫ ر إ‬l‫ ا;  ا‬CD Name '‫ ا‬73

P^.name:=’ali’;
Q^.name:=’ahemd’;

‫ )أي ا;ة‬Q^‫ ل‬Name '‫( وﺡ‬P7Rf  5‫ ر إ‬l‫)أي ا;ة ا‬P^‫ ل‬name '‫ ﺡ‬73
:C 3‫' ا‬l‫ ا‬0; d ` (Q 7Rf  5‫ ر إ‬l‫ا‬

Ali
P

*@*@‫ ا‬F* ‫ول‬:‫ى ﺡ* ا‬3 ‫ي‬,‫ وا‬،Node ‫ع‬0‫ ا@' ﻡ ا‬F‫ إ‬7l P ‫'   أن‬l‫ا‬
:3*‫?;ام ا‬3‫  ا‬jD 3 @‫ ا;  ا‬CD Age '‫ ا‬73 ‫’ و‬Ahemd‘ String

P^.age:=24;
Q^.age:=19;

C 3‫' ا‬l‫ ا‬CD d‫آ ه ﻡﺽ‬


Ali
P 25

DataStrcture 34 ‫ب‬ ‫ا‬/‫أ‬


‫ﻡ ا‪ .5D .5‬ا‪_3(4‬ف ‪ CD‬ا‪ 3‬ل ‪ P‬و ^‪ CD P‬ا ‪ 7‬ﻡ‪ P.Q‬ﻡ‪ 7Y3‬ﻡ ا‪0‬ع ﻡ‪Type 7Rf‬‬
‫‪ ،nodePointer‬و@‪;?3‬م ‪0 B?3‬ان ‪   0‬ﻡ ا‪0‬ع ‪ CD Node‬ا‪,‬اآ‪7‬ة‪ ،‬و أن‬
‫(‪ > ,‬ﺝ;;ة ﻡ (_ل  رة إ‪ 0‬د ﻡ‪ 7Rf‬أو ‪  ,10‬رة ‪. New‬أﻡ ^‪ C5D P‬ا‪ .‬ا@'‬
‫ا‪ l‬ر إ ا‪ ،P O‬و أن  ﻡ' آ ي ' (‪   Y CD 7‬ل ‪.‬أﻡ ال‪P^.name‬‬
‫و ‪;?3@ C5D P^.age‬م ‪ B?3‬ا  ت ‪ CD‬ذ‪ W‬ا@'‪.‬‬

‫اا!& ا‪%‬‬

‫ﺍﻝﻘﻭﺍﺌﻡ ﺍﻝﻤﺘﺼﻠﺔ ﻫﻲ ﺴﻠﺴﻠﺔ ﻤﻥ ﺍﻝﻌﻘﺩ ﺒﺤﻴﺙ ﻜل ﻋﻘﺩﺓ ﺘﺭﺘﺒﻁ ﺒﻌﻘﺩﺓ ﻻﺤﻘﺔ ﻝﻬﺎ‪ ،‬ﻤﺎﻋﺩﺍ ﺍﻝﻌﻘﺩﺓ ﺍﻷﺨﻴﺭﺓ‬
‫ﺍﻝﺘﻲ ﺘﺭﺘﺒﻁ ﺒﺎﻝﻘﻴﻤﺔ ﺼﻔﺭ )‪ (Nil‬ﻭﺍﻝﺘﻲ ﺘﺸﻴﺭ ﺇﻝﻲ ﻨﻬﺎﻴﺔ ﺍﻝﻘﺎﺌﻤﺔ‪ .‬ﻫﻨﺎ ﻨﺤﺘﺎﺝ ﺇﻝﻲ ﺘﻭﻀﻴﺢ ﺒﻌﺽ‬
‫ﺍﻝﻤﺼﻁﻠﺤﺎﺕ ﺍﻝﺘﻲ ﺘﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻝﻘﻭﺍﺌﻡ ﺍﻝﻤﺘﺼﻠﺔ ﻭﻫﻲ‪:‬‬

‫ﺍﻝﻌﻘﺩﺓ ‪Node‬‬

‫ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻥ ﺴﺠل ﺃﻭ ﻜﺎﺌﻥ ﻓﻲ ﺍﻝﻘﺎﺌﻤﺔ ﻴﻤﺜل ﻭﺤﺩﺍﺕ ﻤﺨﺘﻠﻔﺔ ﻤﻥ ﺍﻝﺫﺍﻜﺭﺓ ﺍﻝﻤﻌﻨﻭﻨﺔ ﻭﻴﺤﺘﻭﻱ ﻋﻠﻰ‬
‫ﺤﻘﻭل‪/‬ﺤﻘل ﻝﻠﺒﻴﺎﻨﺎﺕ ﻭﺤﻘل ﺁﺨﺭ ﻴﺤﻤل ﻋﻨﻭﺍﻨﹰﺎ ﻴﺅﺸﺭ ﻝﻠﻌﻘﺩﺓ ﺍﻝﺘﺎﻝﻴﺔ ﻓﻲ ﺍﻝﻘﺎﺌﻤﺔ‪ ،‬ﻭﻝﻴﺴﺕ ﺒﺎﻝﻀﺭﻭﺭﺓ ﺃﻥ‬
‫ﺘﻜﻭﻥ ﺍﻝﻌﻘﺩ ﻤﺘﻼﺼﻘﺔ ﻓﻴﺯﻴﺎﺌﻴﹰﺎ ﻓﻲ ﺍﻝﺫﺍﻜﺭﺓ ﻭﺍﻝﺸﻜل ﺍﻵﺘﻲ ﻴﻭﻀﺢ ﺫﻝﻙ‪:‬‬

‫ﺍﻝﻌﻘﺩﺓ ﺃﻋﻼﻩ ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺤﻘﻠﻴﻥ‪:‬‬

‫ﺤﻘل ﺒﻴﺎﻥ‬

‫ﻫﻭ ﺍﻝﺤﻘل ﺍﻝﺫﻱ ﻴﺤﻤل ﺍﻝﻌﻨﺼﺭ ﺍﻝﺤﻘﻴﻘﻲ ﻓﻲ ﺍﻝﻘﺎﺌﻤﺔ ﻭﺒﻴﺎﻨﺎﺕ ﻫﺫﺍ ﺍﻝﻌﻨﺼﺭ ﻗﺩ ﺘﻜﻭﻥ ﻏﻴﺭ ﻤﺘﺠﺎﻨﺴﺔ ﻤﺜل‬
‫ﻼ‪.‬‬
‫ﻼ ﻜﺎﻤ ﹰ‬
‫‪ :‬ﺭﻗﻡ ﻤﻭﻅﻑ ‪ ،‬ﺍﺴﻡ ﻁﺎﻝﺏ ﺃﻭ ﺴﺠ ﹰ‬

‫ﺤﻘل ﺭﺒﻁ‬

‫ﻴﺤﻤل ﻋﻨﻭﺍﻥ ﺍﻝﻌﻘﺩﺓ ﺍﻝﺘﺎﻝﻴﺔ ﻓﻲ ﺍﻝﻘﺎﺌﻤﺔ ﻭﻴﻌﺭﻑ ﺒﺎﺴﻡ ﺍﻝﻤﺅﺸﺭ ) ‪. ( Pointer‬‬

‫‪Pointer‬‬ ‫ﺍﻝﻤﺅﺸﺭ‬

‫‪DataStrcture‬‬ ‫‪35‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ﻴﺤﺘﻭﻱ ﺍﻝﻤﺅﺸﺭ ﻋﻠﻲ ﻗﻴﻤﺔ ﺒﻴﺎﻨﻴﺔ ﻤﻌﻴﻨﺔ ﺘﺤﺩﺩ ﻤﻭﻗﻊ ﺘﺨﺯﻴﻥ ﺍﻝﻌﻨﺼﺭ ﺍﻝﺘﺎﻝﻲ ﻓﻲ ﺍﻝﻘﺎﺌﻤﺔ ﻭﻏﺎﻝﺒﺎ ﻤﺎ‬
‫ﺘﻜﻭﻥ ﻤﻜﺘﻭﺒﺔ ﺒﺎﻝﻨﻅﺎﻡ ﺍﻝﺜﻨﺎﺌﻲ ﺃﻭ ﺍﻝﺴﺎﺩﺱ ﻋﺸﺭﻱ‪.‬‬

‫‪12 Null‬رة إ ‪ .‬ا (' ا‬


‫‪next‬‬

‫‪head‬‬ ‫‪A‬‬ ‫‪D‬‬ ‫‪G‬‬

‫‪info‬‬

‫‪head‬‬ ‫‪G‬‬ ‫‪ * +‬ﺏ(' وا  ‪%&$‬‬

‫‪head‬‬
‫‪$ * +‬ر‪*,‬‬

‫ﺍﻝﻘﺎﺌﻤﺔ ﺃﺤﺎﺩﻴﺔ ﺍﻻﺘﺠﺎﻩ ‪One Way linked List‬‬

‫ﻫﻲ ﻗﺎﺌﻤﺔ ﺘﺸﻴﺭ ﻜل ﻋﻘﺩﺓ ﻓﻴﻬﺎ ﺇﻝﻲ ﺍﻝﻌﻘﺩﺓ ﺍﻝﺘﻲ ﺘﻠﻴﻬﺎ ﻭﺒﺎﻝﺘﺎﻝﻲ ﺘﻜﻭﻥ ﺍﻝﻌﻨﺎﺼﺭ ﻤﺭﺘﺒﻁﺔ ﻤﻊ ﺒﻌﻀﻬﺎ‬
‫ﺍﻝﺒﻌﺽ ﻋﻠﻰ ﺸﻜل ﺴﻼﺴل ﻭﻴﻭﺠﺩ ﻤﺅﺸﺭ ﻷﻭل ﻋﻘﺩﺓ ﻓﻲ ﺍﻝﻘﺎﺌﻤﺔ ﻭﺍﻝﻌﻘﺩﺓ ﺍﻷﺨﻴﺭﺓ ﺘﺅﺸﺭ ﺇﻝﻲ )ﻻ‬
‫ﺸﻲﺀ( ‪.‬‬

‫ﻤﺜﺎل‪ :‬ﺇﺫﺍ ﻜﺎﻥ ﻝﺩﻯ ﺸﺭﻜﺔ ﺍﻝﺨﻁﻭﻁ ﺍﻝﺠﻭﻴﺔ ﺍﻝﺴﻭﺩﺍﻨﻴﺔ ﺨﻁ ﺭﺤﻼﺕ ﻴﺒﺩﺃ ﻤﻥ ﻤﺩﻴﻨﺔ ‪ Khar‬ﻭﻴﻨﺘﻬﻲ‬
‫ﺒﻤﺩﻴﻨﺔ ‪ Juba‬ﻻﺘﺠﺎﻩ ﻭﺍﺤﺩ ﺒﺩﻭﻥ ﻋﻭﺩﺓ ﻤﺭﻭﺭﹰﺍ ﺒﺎﻝﻤﺩﻴﻨﺔ ‪ A‬ﻭﺍﻝﻤﺩﻴﻨﺔ ‪. F‬‬

‫ﻭﻴﻤﻜﻥ ﺘﻤﺜﻴل ﺫﻝﻙ ﻓﻲ ﺸﻜل ﻗﺎﺌﻤﺔ ﻤﺘﺼﻠﺔ ﺃﺤﺎﺩﻴﺔ ﺍﻻﺘﺠﺎﻩ ﻜﻤﺎ ﻫﻭ ﻤﺒﻴﻥ ﺃﺩﻨﺎﻩ‪:‬‬

‫‪DataStrcture‬‬ ‫‪36‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ﺍﻝﻭﺼﻭل ﺇﻝﻲ ﻋﻨﺼﺭ ﻴﺘﻡ ﺍﻝﺘﺤﺭﻙ ﻝﻪ ﻤﻥ ﺍﻝﻘﻴﻤﺔ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ‪ Head‬ﻭﺠﻌﻠﻬﺎ ﺘﺅﺸﺭ ﺇﻝﻰ ﺍﻝﻌﻘﺩﺓ ﺍﻷﻭﻝﻰ‬
‫ﻓﻲ ﺍﻝﻘﺎﺌﻤﺔ ﺜﻡ ﺍﻻﻨﺘﻘﺎل ﺇﻝﻲ ﺍﻝﻌﻘﺩﺓ ﺍﻝﺘﺎﻝﻴﺔ ﺍﻝﺘﻲ ﻴﺅﺸﺭ ﺇﻝﻴﻬﺎ ﺍﻝﻤﺅﺸﺭ ﻭﻫﻜﺫﺍ ﺇﻝﻰ ﺃﻥ ﻨﺼل ﺇﻝﻲ ﺍﻝﻌﻘﺩﺓ‬
‫ﻼ ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺍﻝﻭﺼﻭل ﺇﻝﻰ ﺍﻝﻤﺩﻴﻨﺔ ‪ F‬ﻴﺠﺏ ﺃﻥ ﻨﺘﺤﺭﻙ ﻤﻥ ﻤﺩﻴﻨﺔ ‪ Khar‬ﻤﺭﻭﺭﹰﺍ ﺒﺎﻝﻤﺩﻴﻨﺔ‬
‫ﺍﻝﻤﺤﺩﺩﺓ‪ ،‬ﻤﺜ ﹰ‬
‫‪ A‬ﺤﺘﻰ ﻨﺼل ﺇﻝﻰ ﺍﻝﻤﺩﻴﻨﺔ ‪. F‬‬

‫ﺇﻨﺸﺎﺀ ﺍﻝﻘﺎﺌﻤﺔ ﺍﻝﻤﺘﺼﻠﺔ‬

‫ﻫﻨﺎﻝﻙ ﻋﺩﺩ ﻤﻥ ﺍﻝﺩﻭﺍل ﻴﻤﻜﻥ ﺃﻥ ﺘﺘﻌﺎﻤل ﻤﻊ ﺍﻝﻘﻭﺍﺌﻡ ﺍﻝﻤﺘﺼﻠﺔ ﻜﻌﻤﻠﻴﺎﺕ‪ ،‬ﻨﺫﻜﺭ ﻤﻥ ﻫﺫﻩ ﺍﻝﺩﻭﺍل‬
‫ﺍﻷﺘﻲ‪:‬‬

‫>‪ <1‬ﺍﻹﻨﺸﺎﺀ ‪:‬‬

‫>‪ .<2‬ﺍﻹﻀﺎﻓﺔ ‪: Insertion‬‬

‫ﺇﺩﺭﺍﺝ ﻋﻘﺩﺓ ﺠﺩﻴﺩﺓ ﻓﻲ ﻨﻬﺎﻴﺔ ﺍﻝﻘﺎﺌﻤﺔ ‪ .‬‬

‫ﺇﺩﺭﺍﺝ ﻋﻘﺩﺓ ﺠﺩﻴﺩﺓ ﻓﻲ ﺒﺩﺍﻴﺔ ﺍﻝﻘﺎﺌﻤﺔ ‪ .‬‬

‫ﺇﺩﺭﺍﺝ ﻋﻘﺩﺓ ﺠﺩﻴﺩﺓ ﺒﻴﻥ ﻋﻘﺩﺘﻴﻥ ‪ .‬‬

‫>‪ .<3‬ﺍﻝﺒﺤﺙ ‪.‬‬

‫>‪ .<4‬ﺍﻝﺤﺫﻑ ‪:‬‬

‫ﺤﺫﻑ ﺍﻝﻌﻘﺩﺓ ﺍﻷﻭﻝﻰ ‪ .‬‬

‫ﺤﺫﻑ ﺍﻝﻌﻘﺩﺓ ﺍﻷﺨﻴﺭﺓ ‪ .‬‬

‫ﺤﺫﻑ ﻋﻘﺩﺓ ﺍﺨﺘﻴﺎﺭﻴﺔ ‪ .‬‬

‫>‪ .<5‬ﺇﻴﺠﺎﺩ ﺍﻝﻁﻭل ‪.‬‬

‫>‪ .<6‬ﻋﺭﺽ ﻋﻨﺎﺼﺭ ﺍﻝﻘﺎﺌﻤﺔ ‪.‬‬

‫>‪ .<7‬ﻨﺴﺦ ﻗﺎﺌﻤﺔ ‪.‬‬

‫‪DataStrcture‬‬ ‫‪37‬‬ ‫ب‬ ‫أ‪/‬ا‬


:+!*(‫( ا‬49‫ ا‬#$ ‫ن‬%$&‫ا‬
 3‫ة ا‬71l‫ ا‬N7E  *`3‫ ء ا < ا‬l ‫ إ‬.3

type

List_Type=integer;

List_Pointer=^ListNode;

ListNode=record

Data:List_Type;

Link:List_Pointer;

end;

var

Head:List_Pointer;

< ‫ دا(' ا‬7 0‫ ' ع  ت ا‬List_Type @ ‫ ع  ت‬7 .3 8‫ﺡ‬
';  ‫ ه إﻡ‬W‫ض ﻡ ذ‬7Y‫ وا‬Integer `‫;اد ا‬:‫ ع ا‬+ 0‫ وﺽ‬0‫ وه‬، *`3‫ا‬
< ‫اءات ا‬7‫ ﻡ ;' آ' دوال وإﺝ‬4 ً ; ;‫;' واﺡ‬3 *`3‫ ا < ا‬CD ‫ع ا  ت‬
'= ‫ي‬,‫ ا@' ا‬0D7 .‫ ﺙ‬، ListNode < ‫ ' ا‬F‫ إ‬7Rf ‫ًا‬7Rf‫ ﻡ‬0D7 .‫ ﺙ‬.*`3‫ا‬
.‫ ﺙ‬، ‫ي ' > ا;ة‬,‫ ا‬Data 7`0‫ ا‬F* ‫ي‬3 ‫`* وه‬3‫آ' ;ة ﻡ ; ا < ا‬
0D7 ‫ات‬7Y3‫ ا‬.@> CD‫ و‬. ‫ ا;ة ا‬C* C3‫ ا;ة ا‬F‫ إ‬7l ‫ي‬,‫ ا‬Link 7Rf‫ ا‬0D7
‫ ا;ة‬F‫ ر إ‬Rj *`3‫ان ;ا ا < ا‬0 ‫ وه‬Head < ‫ رأس ا‬F‫ إ‬7l ‫ًا‬7Rf‫ﻡ‬
.<   F‫و‬:‫ا‬

7 0‫ ' ;د ﻡ ا‬3@ *`3‫ > < ﻡ‬CD 7 0 ‫د( ل‬U ً 7 ً ‫ ﻡ‬7 .`0 C* D‫و‬
0 .>7‫د( ل ا‬j 7 0‫ إد( ل ا‬C530‫`* و‬3‫   < ا‬5*(;‫و‬

type
List_Type=integer;
List_Pointer=^ListNode;
ListNode=record
Data:List_Type;
Link:List_Pointer;
end;
var
Head:List_Pointer;
No:integer;
procedure Fillrest(Last:List_Pointer);

DataStrcture 38 ‫ب‬ ‫ا‬/‫أ‬


begin
writeln('Enter No');
read(no);
while no<>0 do
begin
Last:=Last^.link;
Last^.data:=no;

writeln('Enter No');
read(no);
end;
Last^.link:=nil;
end;
begin

writeln('Enter No');
read(no);
if no<>0 then
begin
head^.data:=No;
fillrest(head);
end
else head:=nil;

end.

DataStrcture 39 ‫ب‬ ‫ا‬/‫أ‬


+!*(‫( ا‬49‫ﺹ ا‬-$ $U
F‫   < وإر  إ‬7`0 ‫ أول‬F‫ دوﻡً إ‬7l ‫ي‬,‫ ا‬Head ‫ ا ;ء ﻡ‬00 7 0‫  ا‬O
Head ‫ ا?  ﻡ‬53?@ '3 ‫ م‬.‫ى ﺙ‬7(‫ @? أ‬0‫ ﻡ‬g@03@3 C3‫ ا‬PrintList ‫ا;ا‬
.C@<7‫ ا‬Q‫ ﻡ‬7 * H 3‫ ا‬C*:‫ ا‬Head F* 7‫ ﺙ‬3‫ى دون ا‬7(‫ أ‬F‫ﻡ ;ة إ‬

Head:=Head^.Link  3‫ة ا‬71l  ‫ات‬7Rf‫?;ام ا‬3  ;‫ ا‬7  '03‫ ا‬.3‫و‬

procedure printlist(head:listpointer);
begin
while head<> nil do
begin
writeln(Head^.data);
head:=head^.link;
end;
end;

+_‫اءات اﺽ أ‬7‫ﺝ‬U‫ ر ا;وال وا‬3(4 '‫ آ ﻡ‬Q‫ ﻡ‬7 C* D‫و‬

Type

Listpointer=^listnode;

Listnode=record

Data:integer;

Link:listpointer;

End;

Var

Head:listpointer; {pointer to list head}

ch,x:integer;

procedure printlist(head:listpointer);

begin

while head<> nil do

DataStrcture 40 ‫ب‬ ‫ا‬/‫أ‬


begin

writeln(Head^.data);

head:=head^.link;

end;

end;

procedure creatlist(var head:listpointer);

var

firstNo:integer;

procedure fillrest(last:listpointer);

{append new nodes to the end of alist}

var

nextNo:integer;

begin

read(nextNo);

while nextNo <> 0 do

begin

new(last^.link);

last:=last^.link;

last^.data:=nextNo;

read(nextNo);

end;

last^.link:=nil;

DataStrcture 41 ‫ب‬ ‫ا‬/‫أ‬


end;

begin {display the instruction to user}

writeln('enter each Numbers on a line');

writeln('enter 0 when done');

read(firstNo);

if firstNo=0 then

head:=nil

else

begin {build list}

new(head);

head^.data:=firstNo;

fillrest(head);

end;

end;

function search(head:listpointer;target:integer):listpointer;

var

found:boolean;

begin

found:=false; {target not founds}

while not found and (head<> nil) do

if head^.data= target then

found:=true

DataStrcture 42 ‫ب‬ ‫ا‬/‫أ‬


else

head:=head^.link; {move down the list}

if found then

search:=head {success}

else

search:=nil; {failure}

end;

Begin

repeat

writeln('1-Create list');

writeln('2-Print list');

writeln('3-Search list');

writeln('4- Exit');

writeln('Inter your choice');

read(ch);

writeln;

case ch of

1:begin

creatlist(head);

writeln;

end;

2:begin

DataStrcture 43 ‫ب‬ ‫ا‬/‫أ‬


printlist(head);

writeln;

end;

3:begin

writeln('inter numebr to seachr...');

readln(x);

if search(head,x)=nil then

writeln ('not found...')

else

writeln('found');

writeln;

end;

end;

until ch=4;

end.

DataStrcture 44 ‫ب‬ ‫ا‬/‫أ‬


‫ﺍﻝﻨﺩﺍﺀ ﺍﻝﺫﺍﺘﻲ ﻝﻠﺩﻭﺍل ‪Recursion function‬‬
‫ا‪;0‬اء ا‪,‬ا ‪;* C‬ا ه أن ; ا;ا ‪7‬ار ‪ 5@1‬أو @‪ C;3‬ا;ا ‪ 5@1‬ﻡ;دّا ﺡ‪.3 8‬‬
‫ا‪ ;3‬ءه دا(' ا;ا ‪ ]10‬ا‪ .‬ا;ا إ‪ F‬أن ‪7R N3‬ط ا‪;* >3‬ا ا@‪ ;3‬ة وه‪W 0‬‬
‫‪ K‬ا_ﺡ‪ /‬ت ا‪ J C3‬أن ‪,‬آ‪ 7‬وه‪:C‬‬

‫‪ F;3@ -1‬ا;ا ‪ 5@1‬دا(' ا;ا ا‪ O‬ﻡ ﻡ_ت ﻡ?‪ CD 1*3‬آ' ﻡ‪7‬ة ‪ .3‬ا‪ ;34‬ء‪.‬‬

‫‪ CD -2‬ا‪;0‬اء ا‪,‬ا ‪;* C‬وال إذا ‪ .3 .‬وﺽ‪7R H‬ط ا‪ C;3@3@D >3‬ا;ا ‪ 5@1‬إ‪ F‬ﻡ ‪ 5 4‬‬
‫‪function will call itself forever‬‬

‫‪ ;0 -3‬اآ‪ 3‬ل (‪ 7‬ا‪ ;3‬ء *;ا م ا‪73‬ﺝ‪j .‬رﺝ ع آ' ا‪ .‬ا‪ ;0 63 C3‬ا‪ ;34‬ء‬
‫ا‪,‬ا ‪ C‬و ;أ (‪ ;0 63 > 7‬ا‪ ;34‬ء ﺡ‪ F3‬أول >‪.‬‬

‫ا‪;?3‬م ا‪;0‬اء ا‪,‬ا ‪;* C‬وال ‪ CD‬ﺡ' آ=‪ 7‬ﻡ ا@ <' ا‪ 7‬ﺽ =‪7‬ة وذ‪ 5  W‬أ @‪J‬‬
‫‪7 7E‬ﻡً *‪ 3‬ﻡ' ﻡ‪ H‬ﺝ‪ H‬وﺽ‪7‬ب ا‪_@*@3‬ت و ‪. 5  7‬‬

‫ﻡ= ل )‪(1‬‬

‫اآ‪ 7 J3‬ﻡً ‪ U‬د ﻡ‪72‬وب أي ;د ‪;?3  N d‬ام ا‪;0‬اء ا‪,‬ا ‪C‬‬

‫;‪function f(n:integer):integer‬‬

‫‪begin‬‬

‫‪if n<=1 then f:=1‬‬

‫;)‪else f:=n*f(n-1‬‬

‫;‪end‬‬

‫_ أي ‪0 jD n=4‬‬
‫وإذا ﺡ و‪ H 3 0‬ﻡ@ ر ا;ا أ_‪73D  +‬اض أن ا ا‪ 5 *7‬آ ‪ 4 6‬ﻡ= ً‬
‫‪ F* '`0‬ا‪;0‬اءات اﺽ أ_‪ +‬ﻡ‪ H‬ا*‪  .‬ن ا‪;0‬اءات ‪ CD xD >3‬ﺡ ل >‬
‫ا‪7l‬ط ‪ n<=1‬وا‪;0‬اءات ه‪C‬‬

‫)‪F(4)= 4 * f(3‬‬
‫)‪F(3)=3* f(2‬‬
‫)‪F(2)=2*f(1‬‬
‫‪F(1)=1‬‬
‫‪F(2)=2*1‬‬
‫‪F(3)=3*2*1‬‬
‫‪F(4)=4*3*2*1‬‬

‫‪DataStrcture‬‬ ‫‪45‬‬ ‫ب‬ ‫أ‪/‬ا‬


(2) ‫ﻡ= ل‬

 3‫ ﻡ (_ل ا_> ا‬W‫ وذ‬Fibonacci number Cl  D ‫ ﻡً @ ب‬7 J3‫اآ‬

F(0) = 0

F(1) = 1 f(2)=0+1=2

F(n) = F(n-1) + F(n-2)

;‫ ا‬W‫ د > ذ‬j ‫ م‬.‫ ﺙ‬Cl  D *@* ‫ ' ا; ﻡ‬3@ ‫ دا‬.

var
a:integer;
function f(n:integer):integer;
begin
if (n=1) or (n=2) then f:=n
else
f:=f(n-1)+f(n-2);
end;
begin
read(a);
write(f(a));
readln
end.

‫' *;ا ا;د‬7 F (N) ‫<] ﻡ (_ل  رة‬7‫ ا‬Q‫ ﻡ‬7 ‫ ا‬CD ‫; ء ا;ا‬3‫; ا‬0 p‫_ﺡ‬
6 ‫ذا آ‬jD 1 ‫ أو‬2 ‫ا ا;د @ وى‬,‫ط ه' ه‬7l‫ ر ا‬3(‫ ا‬.3 W‫ ; ذ‬.‫ ﺙ‬n 7Y3‫ ا‬CD * 3@ ‫ و‬N
5 jD .50‫ ﻡ‬7 ‫ اآ‬6 ‫<] أﻡ إذا آ‬7‫ ا‬Q‫ ﻡ‬7 ‫ ا‬F‫ ا إ‬+,‫ ن ا;ا ف ; ه‬D .0  ‫ﺝ‬U‫ا‬
:C 3‫ ا‬7 3‫ى ﻡ (_ل ا‬7(‫ة أ‬7‫ ا;ا ﻡ‬C;3@ ‫ف‬

F:= f (n-1)+f (n-2);

‫ى‬7(:‫*  ا‬3?‫ة  ﻡ' ﻡ‬7‫ آ' ﻡ‬FD‫ة و‬7‫ ﻡ ﻡ‬7=‫ أآ‬. ;> ‫ *;ا‬C ‫ا‬,‫; ء ا‬34‫ ا‬0‫ه‬

DataStrcture 46 ‫ب‬ ‫ا‬/‫أ‬


‫ا(‪#‬ر ‪Trees‬‬
‫‪ 7 3‬ا‪ R:‬ر واﺡ;ة ﻡ  ذج ه آ' ا  ت ا‪  C30 C3‬أآ=‪F@ 4R 7‬‬
‫ا?‪ GRAPH xO‬و ‪3‬ن ا‪7l‬ة ﻡ ﻡ ; ‪ 50 x7 Nodes‬ﻡ‪7‬ات ‪Edges‬‬
‫وه‪; W 0‬ة وﺡ;ة ‪ CD‬ا@‪3‬ى ا‪:‬ول *‪7l‬ة ‪ 5* N*O‬ا;ة ا‪ @<7‬أو ا‪B‬ر ‪Root‬‬
‫‪ 8‬ن ا‪7‬ات ﻡ‪ ;* 50‬ا‪ xD 5* C3‬وه‪ +,‬ا‪7‬ات ‪ '= 4‬دورة‪ ،‬وا‪ 'l‬ر>‪(1) .‬‬
‫  ذﺝً *‪7l‬ة‬

‫ﺍﻝﺸﻜل ﺭﻗﻡ )‪ (1‬ﻨﻤﻭﺫﺝ ﻝﻠﺸﺠﺭﺓ‬

‫أﻡ إذا اﺡ‪3‬ى ا‪ F* '5‬دورة ‪ d ` jِD‬ﻡ?‪ ًOO‬و] ‪ +7R‬وا‪ 'l‬ر>‪   (2) .‬أن‬
‫ا‪ '5‬اﺡ‪3‬ي *‪ C‬ا;ورة ) ‪,5 ( A B D E C‬ا ‪jD‬ن ا‪7R '= 4 '5‬ة وإ  @‪F‬‬
‫ﻡ?‪ ًOO‬أو  ً‪.‬‬

‫‪DataStrcture‬‬ ‫‪47‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ﺍﻝﺸﻜل ﺭﻗﻡ )‪ (2‬ﻤﺨﻁﻁ ﺍﺤﺘﻭﻯ ﻋﻠﻰ ﺩﻭﺭﺓ‬

‫‪  4‬ه آ' ا‪ R:‬ر ‪ CD‬أ ‪ 5‬ﻡ‪;1‬ة ‪  ' xD‬ال  ‪ 7 3 5‬أ‪ '2D‬ﻡ ﺝ‪ H‬ه آ'‬
‫ا  ت ا‪7(:‬ى ﻡ ﺡ‪ 8‬ا‪B‬ا ا‪ C3‬د ﻡ ا‪;?3‬اﻡ‪ ,10 7 ;0D 5‬ا* ت ا? ‬
‫  ‪ 8‬وا‪,‬ف و ا‪U‬ﺽ ‪   D‬ﺝ;ًا ﻡ ر  ﻡ‪ H‬ه آ' ا  ت ا‪7(:‬ى‪.‬‬

‫ﺘﻌﺭﻴﻔﺎﺕ‬
‫ا‪6‬ﺏ‪-‬ء ‪Children‬‬
‫ه‪ C‬ا; ا‪;0 C3‬ر ﻡ ‪7R‬ة ﻡ ا;ة ا* و ‪ 5 x 7‬ا‪ O‬ﻡ‪7Rf‬ات ا‪N*O x7‬‬
‫*‪ C‬ا;ة ا* ا‪ .‬ا‪:‬ب ‪ Parent‬وا; إ‪;0 C‬ر ﻡ‪ 50‬أ‪ 0‬ء ‪ Children‬و‪ CD‬ا‪'l‬‬
‫ر>‪ F@ (1) .‬ا;ة ‪ B‬وا;ة ‪ C‬أ‪ 0‬ء ا‪,‬ر ‪ A‬و @‪ C‬ا;ة ‪ F‬وا;ة ‪ G‬أ‪ 0‬ء *;ة ‪D‬‬
‫ا‪ C@ C3‬ا‪:‬ب ‪ Parent‬وإذا آ ن ;د ا‪ 0:‬ء اﺙ‪ F@ 0‬ا‪ 4‬ﻡ ﺝ‪ 5‬ا  ‪ 4‬ا‪:‬‬
‫‪ Right Child‬وا‪ 4‬ﻡ ﺝ‪ 5‬ا@ ر  ‪ 4‬ا‪ Left Child 7@:‬و‪ CD‬ا‪ 'l‬ر>‪C@ (1) .‬‬
‫ا;ة ‪ G‬ا‪ 4‬ا‪ Right Child :‬وا;ة ‪ 4  F‬ا‪;* Left Child 7@:‬ة ‪. D‬‬

‫ا(( ‪Edge‬‬
‫ه  رة  ﻡ‪ 7Rf‬ا‪ x7‬ا‪,‬ي ‪  ; x7‬ﻡ=' ﻡ‪ 7Rf‬ا‪ x7‬ا‪,‬ي ‪  x7‬ا‪,‬ر‬
‫وا‪.4‬‬

‫ا ر‪Leaf V‬‬


‫ه‪  C‬رة  ;ة ‪3 4‬ي *‪ F‬أ‪ 0‬ء و‪ CD‬ا‪ 'l‬ر>‪ F@ (1) .‬ا; ‪ J‬و ‪ I‬و ‪ H‬و ‪G‬‬
‫و ‪ E‬أوراق‪.‬‬

‫‪DataStrcture‬‬ ‫‪48‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ا(‪8‬ر ‪Path‬‬
‫ه  رة  ﻡ ﻡ‪  33‬ﻡ ا‪7‬ات وإذا و' ا@ ر إ‪ F‬ور> @‪ F‬ا@ ر‬
‫{`‪ Branch ً 0‬و‪ CD‬ا‪ 'l‬ر>‪ C@ (1) .‬ا(‪8‬ر ‪.`{ H<-F<-d<-B<-A‬‬

‫ا‪)T‬ة ا ‪Tree Sub $‬‬


‫‪ N*O‬ا‪ .‬ا‪7l‬ة ا‪ F* 71‬أي ﺝ‪B‬ء ﻡ ا‪ '5‬ا‪7l‬ي وا‪ 'l‬ر>‪ (3) .‬ﺽ‪d‬‬
‫‪7R‬ات ‪ 7D‬ﻡ‪ = 0‬ﻡ ا‪7l‬ة ا‪. :‬‬

‫ﺍﻝﺸﻜل ﺭﻗﻡ )‪ (3‬ﺍﻝﺸﺠﻴﺭﺍﺕ ﺍﻝﻔﺭﻋﻴﺔ‬

‫ا(‪ *8‬ي ‪Levels‬‬


‫@‪;?3‬م ﻡ@‪3‬ى ا‪7l‬ة أو ‪ F* 4;* 5‬أآ ‪; 7‬د ﻡ ا; اﺝدة ‪ CD‬أ{` ن‬
‫ا‪7l‬ة أو أآ ‪ 7‬ﻡ@‪3‬ي ‪:‬ي ;ة  ‪7l‬ة وا‪ 'l‬ر>‪   (4) .‬ا@‪ 3‬ت ا?‪7l* 1*3‬ة‬
‫و‪ (depth) 5‬ا‪,‬ي @ وي ‪3‬‬

‫‪.‬‬

‫ﺍﻝﺸﻜل ﺭﻗﻡ )‪ (4‬ﻋﻤﻕ ﻭﻤﺴﺘﻭﻯ ﺍﻝﺸﺠﺭﺓ‬

‫‪DataStrcture‬‬ ‫‪49‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ﻤﺜﺎل ) ‪( 1‬‬

‫ﺍﺤﺴﺏ ﻋﻤﻕ ﺍﻷﺸﺠﺎﺭ ﺍﻝﺘﺎﻝﻴﺔ‬

‫)ﺃ(‬
‫ﺍﻝﻌﻤﻕ ‪(depth)=3‬‬

‫)ﺏ(‬
‫ﺍﻝﻌﻤﻕ ‪(depth)=4‬‬

‫‪DataStrcture‬‬ ‫‪50‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ا(‪#‬ر ا)!  ‪Binary Tree‬‬

‫ا‪7l‬ة ا=‪ < 0‬ه‪ C‬ا‪7l‬ة ا‪3 C3‬ى آ' ;ة ‪ F* ( two children ) F* 5D‬ا‪:‬آ=‪7‬‬
‫‪ J‬أن ن ' ;ة ‪ CD‬ا‪7l‬ة ا=‪; < 0‬د ‪ 0‬أو ‪ 1‬أو ‪ 2‬ﻡ ا‪6‬ﺏ‪-‬ء‬
‫وا‪ ?T‬ر>‪ (6) .‬ﺽ‪ d‬ذ‪W‬‬

‫ﻋﺩﺩ ﺍﻷﺒﻨﺎﺀ ﺒﻌﻘﺩﺓ ﻓﻲ ﺍﻝﺸﺠﺭﺓ ﺍﻝﺜﻨﺎﺌﻴﺔ )‪ (6‬ﺍﻝﺸﻜل ﺭﻗﻡ‬

‫آ  أن ن ا‪7R 4‬ة و ‪  C 3‬أن ن ه‪  7R W 0‬ﻡ‪ 3*`10‬‬
‫‪ 5* N*O 52‬ا‪7l‬ة ا@‪7‬ى وا‪7l‬ة ا‪ F0‬وه ; ذا ‪ 5‬ه آ' ‪ 7R‬ﺙ‪< 0‬‬
‫و ‪ C 3‬ن ا‪ 73‬ﻡ‪73‬رًا ‪ Recursive‬وه‪ +,‬ﻡ‪B‬ة ﻡ‪ * '5@ 5‬ا ‪7‬ﻡ‪.‬‬
‫‪ B3‬ه' ا‪7l‬ة ا=‪ < 0‬ﺝد ﻡ‪7Rf‬ي ر‪ C* x‬ا‪:‬آ=‪ CD 7‬أي ;ة أو ‪ 7( F0‬أ‬
‫ ;ة أن ‪3‬ي *‪ F‬ﻡ‪ 7‬واﺡ; أو أﺙ‪ 0‬أو ‪3 4‬ي *‪ F‬ﻡ‪ 7‬وه‪ CD C‬ه‪ +,‬ا ‬
‫@‪ F‬ور> آ ذآ‪ 7‬ذ‪.ً  W‬‬

‫‪Binary Tree Traversal‬‬ ‫ﺍﻝﺘﻨﻘل ﻋﺒﺭ ﺍﻷﺸﺠﺎﺭ ﺍﻝﺜﻨﺎﺌﻴﺔ‬


‫ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ‪ traversing‬ﻋﺒﺭ ﺍﻷﺸﺠﺎﺭ ﻴﻘﺼﺩ ﺒﻪ ﺯﻴﺎﺭﺓ ﻜل ﻋﻘﺩﺓ ﻓﻲ ﺍﻝﺸﺠﺭﺓ ﻤﺭﺓ ﻭﺍﺤﺩﺓ‬
‫ﻭﺒﺘﺭﺘﻴﺏ ﻤﻌﻴﻥ ﻭﺫﻝﻙ ﺒﻐﺭﺽ ﺇﺠﺭﺍﺀ ﻋﻤﻠﻴﺔ ﻤﺤﺩﺩﺓ ﻋﻠﻰ ﺍﻝﺒﻴﺎﻨﺎﺕ ﻭﻫﻭ ﺒﺎﻝﺘﺎﻝﻲ ﻏﻴﺭ ﻗﺎﺼﺭ ﻋﻠﻰ‬
‫ﺍﻷﺸﺠﺎﺭ ﺍﻝﺜﻨﺎﺌﻴﺔ ﺇﺫ ﻴﻤﻜﻥ ﺘﻨﻔﻴﺫﻩ ﻋﻠﻰ ﺃﻱ ﻫﻴﻜل ﺒﻴﺎﻨﺎﺕ ﺁﺨﺭ ﻭﻋﺎﺩﺓ ﻤﺎ ﻴﺘﻡ ﺍﻝﺘﻨﻘل ﻋﺒﺭ ﺍﻷﺸﺠﺎﺭ ﻤﻥ‬
‫ﺨﻼل ﺜﻼﺜﺔ ﺃﺴﺎﻝﻴﺏ ﻫﻲ‪:‬‬
‫§ ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﻭﺴﻁﻲ ‪. Inorder Traversal‬‬
‫§ ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﺒﻌﺩﻱ ‪. Postorder Traversal‬‬
‫§ ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﻘﺒﻠﻲ ‪. Preorder Traversal‬‬
‫ﻭﻴﻌﺘﺒﺭ ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﻭﺴﻁﻲ ‪ Inorder Traversal‬ﻫﻭ ﺍﻝﺸﺎﺌﻊ ﻭﺍﻷﻜﺜﺭ ﺍﺴﺘﺨﺩﺍﻤ ﹰﺎ‪.‬‬

‫‪DataStrcture‬‬ ‫‪51‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﻭﺴﻁﻲ ‪Inorder Traversal‬‬
‫ ;أ ا‪ CD '03‬ه‪,‬ا ا‪*:‬ب ‪ B‬رة ا‪ 4‬ا‪ L 7@:‬ﺙ[ ا;ة ا‪7‬اد  ‪ N 5‬ﺙ‪ .‬ا‪ 4‬ا‪:‬‬
‫‪ R‬و أن ?‪ 7`3‬ه‪,‬ا ا‪*:‬ب ـ ‪ LNR‬وإذا ا‪ 7 3‬أن ا‪ B‬دة ‪ >  E C0‬ا;ة‬
‫و‪ N O ;0‬أ*ب ا‪ '03‬ا‪ F* CO‬ا‪ 'l‬ا‪C 3‬‬

‫ن ا‪ 30‬ه‪BAC C‬‬

‫>; ن ا‪ 4‬ا‪ 7@:‬أو ا‪ :‬أو آ*‪  5‬رة  ‪7R‬ة ‪ .3D 7D‬ز رة ا‪7l‬ة‬
‫‪ 4‬و‪ .3 5D‬ز رة ا‪ 4‬ا‪ 7@:‬وه‪,‬ا و ‪7‬ى ‪ CD‬ه‪,‬ا ا‪*:‬ب ‪7‬ارًا‬ ‫ا‪ 71‬ا@‪ 7‬ى أو َ‬
‫@‪3‬ﺝ‪ J‬ا‪;?3‬ام ا‪ ;3‬ء ا‪;0‬اء ا‪,‬ا ‪;* C‬ا ‪ Recursive Function‬و‪f3‬دي ا;ا‬
‫ﺙ_ث ﻡ‪ 5‬م‪:‬‬
‫‪ -1‬ا‪ 7  '03‬ا‪7l‬ة ا‪ 71‬ا@‪ 7‬ى *;ة ا;(*‪.‬‬
‫‪ -2‬ز رة ا;ة ا;(*‪.‬‬
‫‪ -3‬ا‪ 7  '03‬ا‪7l‬ة ا‪ 71‬ا‪;* F0‬ة ا;(*‪.‬‬

‫"‪.‬ل )‪(5‬‬
‫ﻡ ‪ 3‬ا‪ ,10 ;0  O‬أ*ب ا‪ '03‬ا‪ F* CO‬ا‪ 5‬آ' ا‪ 7l‬ا‪ 3‬‬

‫)ﺃ (‬

‫_ﺡ‪ p‬أن *‪,‬ر ‪ 1‬ا أ@‪ 7‬وا أ وه  رة  ‪7R‬ة ‪; 7D‬أ  ‪7l‬ة‬
‫ا‪ 71‬ﻡ ا ‪ J‬ا‪ 7@:‬و‪ ; 5D‬أن ا; ‪ 5 2‬ا أ@‪ 4 7‬وا أ ‪ 5‬و* ف ‪.3‬‬
‫ا‪ B‬رة ا‪7l‬ة ‪ CD‬ا ‪ J‬ا‪ 7@:‬ﺡ@‪ J‬ا‪ '@*@3‬ا‪C 3‬‬

‫‪DataStrcture‬‬ ‫‪52‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫‪4->2->5‬‬

‫وﻡ ﺙ‪ .‬م ‪ B‬رة ا‪,‬ر ‪ 1‬و;ه م ‪ B‬رة ا‪7l‬ة ا‪ 71‬ﻡ ا ‪ J‬ا‪ :‬و‪5D‬‬
‫; أن ا; ‪ 5 3‬ا أ@‪ 6 7‬وا أ ‪ 7‬و* ف ‪ .3‬ا‪ B‬رة ا‪7l‬ة ﺡ@‪ J‬ا‪'@*@3‬‬
‫ا‪C 3‬‬

‫‪6->3->7‬‬

‫ﻭﻋﻠﻴﻪ ﺘﻜﻭﻥ ﺍﻝﻨﺘﻴﺠﺔ ﻫﻲ‬

‫‪4->2->5->1->6->3->7‬‬

‫)ﺏ(‬

‫ﺍﻝﻨﺘﻴﺠﺔ ﻫﻲ‬

‫‪4->2->8->5->9->1->6->3->7‬‬

‫‪DataStrcture‬‬ ‫‪53‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫)ﺝ(‬

‫ﺍﻝﻨﺘﻴﺠﺔ ﻫﻲ‬

‫‪8->4->9->2->5->1->6->3->7‬‬

‫)ﺩ(‬

‫ﺍﻝﻨﺘﻴﺠﺔ ﻫﻲ‬

‫‪1->2->3->4->5->6->7->8->9‬‬

‫‪DataStrcture‬‬ ‫‪54‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ﺍﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﺒﻌﺩﻱ ‪Postorder Traversal‬‬
‫ ;أ ا‪ CD '03‬ه‪,‬ا ا‪*:‬ب ‪ B‬رة ا‪ 4‬ا‪ L 7@:‬ﺙ[ ا‪ 4‬ا‪ R :‬ﻡ ﺙ‪ .‬ا;ة ا‪7‬اد‬
‫ ‪ N 5‬و أن ?‪ 7`3‬ه‪,‬ا ا‪*:‬ب ـ ‪ LRN‬وإذا ا‪ 7 3‬أن ا‪ B‬رة ‪>  E C0‬‬
‫ا;ة و‪ N O ;0‬أ*ب ا‪ '03‬ا ;ي *‪ F‬ا‪ 'l‬ا‪C 3‬‬

‫ن ا‪ 30‬ه‪BCA C‬‬

‫>; ن ا‪ 4‬ا‪ 7@:‬أو ا‪ :‬أو آ*‪  5‬رة  ‪7R‬ة ‪ .3D 7D‬ز رة ا‪7l‬ة‬
‫‪ 4‬و‪ .3 5D‬ز رة ا‪ 4‬ا‪ 7@:‬وه‪,‬ا و ‪7‬ى ‪ CD‬ه‪,‬ا ا‪*:‬ب‬ ‫ا‪ 71‬ﻡ ا ‪ J‬ا‪ 7@:‬أو َ‬
‫‪7‬ار @‪3‬ﺝ‪ J‬ا‪;?3‬ام ا‪ ;3‬ء ا‪;0‬اء ا‪,‬ا ‪;* C‬ا ‪ Recursive Function‬و‪f3‬دى‬
‫ا;ا ﺙ_ث ﻡ‪ 5‬م‪:‬‬
‫‪ -1‬ا‪ 7  '03‬ا‪7l‬ة ا‪ 71‬ﻡ ا ‪ J‬ا‪;* 7@:‬ة ا;(*‪.‬‬
‫‪ -2‬ا‪ 7  '03‬ا‪7l‬ة ا‪ 71‬ﻡ ا ‪ J‬ا‪;* :‬ة ا;(*‪.‬‬
‫‪ -3‬ز رة ا;ة ا;(*‪.‬‬

‫ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﻘﺒﻠﻲ ‪Preorder Traversal‬‬


‫ ;أ ا‪ CD '03‬ه‪,‬ا ا‪*:‬ب ‪ B‬رة ا;ة ا‪7‬اد  ‪ N 5‬ﺙ‪ .‬ا‪ 4‬ا‪ L 7@:‬و"‪ #‬ﺙ[ ا‪4‬‬
‫ا‪ R :‬و أن ?‪ 7`3‬ه‪,‬ا ا‪*:‬ب ـ ‪ NLR‬وإذا ا‪ 7 3‬أن ا‪ B‬رة ‪>  E C0‬‬
‫ا;ة و‪ N O ;0‬أ*ب ا‪ '03‬ا *‪ F* C‬ا‪ 'l‬ا‪C 3‬‬

‫ﺘﻜﻭﻥ ﺍﻝﻨﺘﻴﺠﺔ ﻫﻲ ‪ABC‬‬

‫‪DataStrcture‬‬ ‫‪55‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫ﻤﺜﺎل )‪(6‬‬

‫ﻤﺎ ﻨﺘﻴﺠﺔ ﺍﻝﻁﺒﺎﻋﺔ ﻋﻨﺩ ﺘﻨﻔﻴﺫ ﺃﺴﻠﻭﺏ ﺍﻝﺘﻨﻘل ﺍﻝﻭﺴﻁﻲ ﻭﺍﻝﺒﻌﺩﻱ ﻭﺍﻝﻘﺒﻠﻲ ﻋﻠﻲ ﺍﻻﺸﺠﺎﺭ ﺍﻝﺜﻨﺎﺌﻴﺔ ﺍﻝﺘﺎﻝﻴﺔ‬

‫)ﺃ (‬

‫‪ 3‬أ*ب ا‪ '03‬ا‪ CO‬ه ‪A-B+C*D/E‬‬


‫‪ 3‬أ*ب ا‪ '03‬ا ;ي ه ‪AB-CDE/*+‬‬
‫‪ 3‬أ*ب ا‪ '03‬ا *‪ C‬ه ‪+-AB*C/DE‬‬

‫)ﺏ(‬

‫‪ 3‬أ*ب ا‪ '03‬ا‪ CO‬ه‬


‫‪8->4->9->2->5->1->6->3->7‬‬

‫‪DataStrcture‬‬ ‫‪56‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫‪ 3‬أ*ب ا‪ '03‬ا ;ي ه‬
‫‪8->9->4->5->2->6->7->3->1‬‬
‫‪ 3‬أ*ب ا‪ '03‬ا *‪ C‬ه‬
‫‪1->2->4->8->9->5->3->6->7‬‬

‫ﻡ= ل )‪(7‬‬

‫إذا ‪ 0 E‬أ*ب ا‪ '03‬ا‪7R F* CO‬ة ﺙ‪ Q30 < 0‬ا‪ J 73‬ا‪C 3‬‬

‫‪1->2->3->4->5->6->7->8->9‬‬

‫وإذا ‪ 0 E‬أ*ب ا‪ '03‬ا *‪ F* C‬ذات ا‪7l‬ة ‪ Q30‬ا‪ J 73‬ا‪C 3‬‬

‫‪6->4->2->1->3->5->8->7->9‬‬

‫أر‪ .‬ا‪7l‬ة‪.‬‬

‫ا'‬

‫‪ CD ; -1‬أ*ب ا‪ '03‬ا *‪ C‬أن ا‪,‬ر ه أول ;ة ‪ .3‬ز ر و ‪ 7 3 C 3‬ا;ة ‪ 6‬ه‪C‬‬
‫ﺝ‪,‬ر ا‪7l‬ة ا=‪.< 0‬‬

‫‪ CD ; -2‬أ*ب ا‪ '03‬ا‪ CO‬أن ا‪,‬ر)وه ا;ة ‪  '`1 (6‬ا ‪ J‬ا‪7l* 7@:‬ة‬
‫وا ‪ J‬ا‪ :‬و* ‪jD‬ن ا; ‪ '= 1,2,3,4,5‬ا ‪ J‬ا‪7l* 7@:‬ة ‪ '= 0‬ا;‬
‫‪ 7,8,9‬ا ‪ J‬ا‪7l* :‬ة‪.‬‬

‫‪ 7 3 -3‬أول ;ة ﻡ ا; ا‪  3 C3‬ﻡ‪ 50‬ا ‪ J‬ا‪7l* 7@:‬ة وه‪ C‬ا; }‪{1,2,3,4,5‬‬
‫‪ CD‬أ*ب ا‪ '03‬ا *‪ C‬ه‪ C‬ا‪ 4‬ا‪,* 7@:‬ر ‪ 6‬وه‪ C‬ا;ة ‪ 4‬وأن أول ;ة ﻡ ا; ا‪C3‬‬
‫‪  3‬ﻡ‪ 50‬ا ‪ J‬ا‪7l* :‬ة وه‪ C‬ا; }‪ CD {7,8,9‬أ*ب ا‪ '03‬ا *‪ C‬ه‪ C‬ا‪4‬‬
‫ا‪,* :‬ر ‪ 6‬وه‪ C‬ا;ة ‪. 8‬‬

‫وﺡ‪ F3‬ا‪b‬ن ‪ ;; .‬ا‪,‬ر وا‪ 4‬ا‪ :‬وا‪ 7@:‬آ ﺽ ا‪ 'l‬ا‪:C 3‬‬

‫‪ 7 3 -4‬ا‪ 4‬ا‪,* 7@:‬ر ه ﺝ‪,‬ر ا‪7l‬ة ‪ CD‬ا ‪ J‬ا‪ 7@:‬و* ‪jD‬ن ا;ة ‪ 4‬ه‪ C‬ﺝ‪,‬ر‬
‫ا‪7l‬ة ‪ CD‬ا ‪ J‬ا‪ 7@:‬و ; ‪ CD‬أ*ب ا‪ '03‬ا‪ CO‬أن ا‪,‬ر)وه ا;ة ‪'`1 ( 4‬‬
‫ ا ‪ J‬ا‪7l* 7@:‬ة وا ‪ J‬ا‪ :‬و* ‪jD‬ن ا; ‪ '= 1,2,3‬ا ‪ J‬ا‪7@:‬‬
‫*‪7l‬ة ‪ '= 0‬ا;ة ‪ 5‬ا ‪ J‬ا‪7l* :‬ة ا‪.71‬‬

‫‪DataStrcture‬‬ ‫‪57‬‬ ‫ب‬ ‫أ‪/‬ا‬


‫‪ 7 3 -5‬أول ;ة ﻡ ا; ا‪  3 C3‬ﻡ‪ 50‬ا ‪ J‬ا‪7l* 7@:‬ة وه‪ C‬ا; }‪CD {1,2,3‬‬
‫أ*ب ا‪ '03‬ا *‪ C‬ه‪ C‬ا‪ 4‬ا‪,* 7@:‬ر ‪ 4‬وه‪ C‬ا;ة ‪ 2‬وه‪ ]1 CD C‬ا>‪ 6‬ن ﺝ‪,‬رًا‬
‫*;  ا‪ 3 3‬وه }‪ {1,3‬وﺡ@‪ J‬أ*ب ا‪ '03‬ا‪ CO‬أن ا‪,‬ر)وه ا;ة ‪'`1 (2‬‬
‫ ا ‪ J‬ا‪7l* 7@:‬ة وا ‪ J‬ا‪ :‬و* ‪jD‬ن ا;ة ‪ '= 1‬ا ‪ J‬ا‪7l* 7@:‬ة‬
‫‪ '= 0‬ا;ة ‪ 3‬ا ‪ J‬ا‪:‬‬

‫‪ 7 3 - 6‬ا‪ 4‬ا‪,* :‬ر ه ﺝ‪,‬ر ا‪7l‬ة ‪ CD‬ا ‪ J‬ا‪ :‬و* ‪jD‬ن ا;ة ‪ 8‬ه‪ C‬ﺝ‪,‬ر‬
‫ا‪7l‬ة ‪ CD‬ا ‪ J‬ا‪ :‬و ; ‪ CD‬أ*ب ا‪ '03‬ا‪ CO‬أن ا‪,‬ر )وه ا;ة ‪'`1 ( 8‬‬
‫ ا ‪ J‬ا‪7l* 7@:‬ة وا ‪ J‬ا‪ :‬و* ‪jD‬ن ا; ‪ '= 7‬ا ‪ J‬ا‪7l* 7@:‬ة‬
‫‪ '= 0‬ا;ة ‪ 9‬ا ‪ J‬ا‪7l* :‬ة ا‪.71‬‬

‫و* ` ‪ d‬ا‪ 'l‬ا‪7l* C< 50‬ة آ *‪: C‬‬

‫‪DataStrcture‬‬ ‫‪58‬‬ ‫ب‬ ‫أ‪/‬ا‬


Binary Search Tree *!)‫ ا‬+‫ ة اﺡ‬#
7@:‫ ا‬4‫ _> ا‬D N < 0=‫ ر ا‬R:‫ً ﻡ ا‬0‫ ً ﻡ‬C< 0=‫ ا‬8 ‫ة ا‬7R 7 3
‫ ﻡ‬7 ‫ أآ‬:‫ ا‬4‫ي ;ة أ>' ﻡ أو @ وي ا;ة وا‬:

-: 4-.‫)ة ا‬T‫ء ا‬-‫ﺏ‬

Data ‫ ﻡ ﺙ_ﺙ ﺡل أﺡ;ه‬+‫ن ;ور‬3 ‫ي‬,‫ ا‬component '@‫ة ﻡ ا‬7l‫ن ا‬3
‫ *;ة‬7Rf‫ وه ﻡ‬right ‫ و‬Left 7(b‫ ا‬7`0‫ة وا‬7l  ‫اد وﺽ‬7‫ ا‬7`0‫ ا‬D‫و‬
‫ ل‬l‫ا وا;ة ا‬

type

BinarySearchTree = ^Component;

Component = record

Data: integer;

Left, Right: BinarySearchTree

end;

DataStrcture 59 ‫ب‬ ‫ا‬/‫أ‬


:4-.‫)ة ا‬T‫ء ا‬%‫دا إﺥ‬

0‫ة ا‬7l‫˜ ا‬71 ‫ض‬7Y nil ‫  ا‬H2 ‫ة و‬7l‫ر ا‬,‫ ' ﺝ‬3@

function MakeEmptyBinarySearchTree: BinarySearchTree;


begin
MakeEmptyBinarySearchTree := nil
end;

‫ة‬9$ ?($

‫ ا‬H‫ < و ﺽ‬0=‫ة ا‬7l‫ ﻡ ع ا‬7Y3‫ ﻡ‬7 .3‫  ;ا و‬5‫اد وﺽ‬7‫' *;ا ا ا‬7
{‫ ر‬D ; F‫ان إ‬7l ‫ي ا وا@ ر‬7Rf‫ ﺝ' ﻡ‬H‫ ﺡ' ا  ت ا? ص  ﻡ‬CD

function MakeSingletonBinarySearchTree (Elm: integer):


BinarySearchTree;
var
Result: BinarySearchTree;
begin
New (Result);
Result^.Data := Elm;
Result^.Left := MakeEmptyBinarySearchTree;
Result^.Right := MakeEmptyBinarySearchTree;
MakeSingletonBinarySearchTree := Result
end;

‫)ة‬T‫ ا‬+‫ ﺥ‬#" ‫ا*_آ‬

nil F‫ إ‬7Rf  . ‫ وإذا‬true ‫ ا;ا ا‬H‫ﺝ‬7 nil F‫ إ‬7Rf ‫ة إذا آ ن‬7l‫ر ا‬,‫ ر ﺝ‬3(‫ ا‬.3
{‫ ر‬D 7{ ‫ة‬7l‫ أن ا‬W‫ ذ‬C0

function EmptyBinarySearchTree (B: BinarySearchTree): Boolean;


begin
if B = nil then EmptyBinarySearchTree := true
else then EmptyBinarySearchTree := false;
end;

4-.‫)ة ا‬T‫ا&دﺥل  ا‬

7`0‫ إر ل ا‬.3 ، < 0= ‫ة ا‬7l‫ر ا‬,‫ة وﺝ‬7l‫ ا‬CD  (‫اد إد‬7‫ ا‬7`0‫اء ا‬7‫ﺝ‬U‫ا ا‬,‫ ' ه‬3@
‫ أ>' ﻡ > ا  ت‬6 ‫ذا آ‬jD ‫ة‬7l‫ر ا‬,‫ ﻡ ر  ا ا;;ة  ﺝ‬.3 .‫ دا ' ا;ة ﺙ‬F‫إ‬
:‫ع ا‬71  ً  ‫ ;اؤه ذا‬.3 7 ‫ أآ‬6 ‫ وإذا آ‬7@:‫ع ا‬71  ً ‫ ;اء ا;ا ;اءًا ذا‬.3 ‫ر‬, 

DataStrcture 60 ‫ب‬ ‫ا‬/‫أ‬


procedure InsertIntoBinarySearchTree (Elm: integer; var B:
BinarySearchTree);

begin
if EmptyBinarySearchTree (B) then
B := MakeSingletonBinarySearchTree (Elm)
else if Elm < B^.Data then
InsertIntoBinarySearchTree (Elm, B^.Left)
else
InsertIntoBinarySearchTree (Elm, B^.Right)
end;
4-.‫)ة ا‬T‫ا`  ا‬

8 ‫ ح ا‬31 ً  O‫ﻡ‬  ‫ء‬B‫ ; ﺝ‬. ‫ذا‬jD ‫ر‬,‫ ا‬CD 8 ‫ ا‬.3 8‫ ﺡ‬D ‫ ‹ﺽ‬5 l‫ ﻡ‬7O .3
‫ ;اءًا‬8 ‫ دي دا ا‬0 0‫ذا آ ن أ>' ﻡ‬jD 7`0‫ ا‬H‫ ﻡ‬+7 3? key 0 8 ‫اد ا‬7‫ ا‬7`0‫أو ا‬
‫' ا;ة‬7 +; ‫;ﻡ‬0‫ و‬.‫ء ا‬B  5‫ د‬0 7 ‫ء ا@ ر *;ة ا  وإن آ ن أآ‬B  ً ‫ذا‬
 ‫ﺝ‬j‫ آ‬3 C3‫ا‬

function SearchBinarySearchTree (key: integer; B:


BinarySearchTree;
var Found: integer): Boolean;
begin
if EmptyBinarySearchTree (B) then
SearchBinarySearchTree := False
else if key < B^.Data then
SearchBinarySearchTree := SearchBinarySearchTree (key,
B^.Left, Found)
else if B^.Data < key then
SearchBinarySearchTree := SearchBinarySearchTree (key,
B^.Right, Found)
else begin
SearchBinarySearchTree := True; { because key = B^.Data }
Found := B^.Data
end
end;
+!*(‫( ا‬49‫ﺹ ا‬-$ $U

'` F3‫ ﺡ‬7 0‫  آ' ا‬E‫ ا@ ر و‬5‫ *;ا ﺝ‬C ‫ا‬,‫;اء ا‬0  *`3‫ ا < ا‬7 0  E .3
7O‫] ا‬10 ‫ ا‬5‫ ﺝ‬7 0 ‫ دي‬0 .‫ ﺙ‬nil {‫ ر‬D ‫ ;ة‬F‫إ‬

DataStrcture 61 ‫ب‬ ‫ا‬/‫أ‬


procedure PrintBinarySearchTreeData (B: BinarySearchTree);

begin

if not EmptyBinarySearchTree (B) then begin

PrintBinarySearchTreeData (B^.Left);

writeln (B^.Data);

PrintBinarySearchTreeData (B^.Right)

end

end;

begin

end.

DataStrcture 62 ‫ب‬ ‫ا‬/‫أ‬


 ‫ات ا‬
‫ﻡز ا د ;ون رﻡ ت أو‬7‫وف وا‬7‫ ه ﻡ* ﻡ ا‬Text File C`0‫ا* ا‬
W, txt +‫;اد‬3‫ و{  ً ﻡ ن اﻡ‬notepad ‫ة‬71‫ ا‬CD ‫  دة‬J3‫ه و‬7{ ‫ﺝ;اول أو‬
Text File ‫ف ـ‬7

text ‫ ﻡ ع‬7Y3‫ آ‬C`0‫ ا* ا‬7 .3


var
F : text;
* .3 ‫ أ‬CD ‫ ه آ' ا  ت‬C>   *‫* ا‬3?

J*`‫ص ا‬7‫ ا‬F* *‫ي * ا‬,‫ ا‬C‫ ا‬.4‫ ه ا‬C`0‫ ** ا‬C< B1‫ ا‬.4‫ا‬
W‫ ذ‬F‫ رة إ‬R‹ C@<7‫ ا‬Q‫ ﻡ‬7 ‫ ا‬CD ‫?;ﻡ‬3@ ‫ي‬,‫ ا‬7Y3‫ ا‬.‫ ه ا‬CO0‫ ا‬.4‫وا‬
*‫ا‬

‫ة‬71l‫?;م ا‬3@ CO0‫ ا‬.4  ** C< B1‫ ا‬.4‫ ا‬x7


assign(F,'1.txt');
(1.txt) F@‫ ا‬C`0‫ ا* ا‬F‫ إ‬7l F 7Y3‫ أن ا‬C0 ‫و‬
*‫ أن ا‬C0 ‫ ا* ;ون ﻡ@ ر‬7‫ أن ذآ‬8‫ ** ﺡ‬d`‫ ; ﻡ  ا@ ر ا‬4‫و‬
‫ ن‬drive D F* *‫_ ' ا‬ ً =D .Q‫ ﻡ‬7 ‫] ا*; اﺝد  ا‬1 F* * .3
C 3 ‫ا* آ‬
assign(F,'D:\1.txt');
J3 drive E '(‫ دا‬programs F@ ;*‫وإذا آ ن ا* ;ا(' ﻡ‬
assign(F,'E:\programs\1.txt');

‫*ﺏ‬+ +(‫ ا‬a*


‫ة‬71l‫?;م ا‬3@ *  3* 3D‫ ﺝ;; و‬C` *‫ ء ﻡ‬l U
Rewrite(F);
*  ً  @‫ آ' ا  ت اﺝدة ﻡ‬d@ 5 ‫  * آ أ‬3* *‫ ا‬B5 C‫وه‬

+(‫@ ا‬+$ ‫ا*ﺏ‬


7‫ﻡ‬:  .3 writeln *‫ ا‬.‫  ا‬3‫ آ‬J *‫  ا‬3‫و > ' آ‬
writeln(f,'This is my first File');

+(‫ق ا‬%E‫إ‬
C3‫ات ا‬7Y3‫' ا‬30 F3‫اء ا* ت * ﺡ‬7‫ إ{_ق ا* ; إﺝ‬.3 ‫وري أن‬72‫ﻡ ا‬
CD 6 RAM‫   رة‬W‫ ذ‬.3‫ و‬. J*`‫ص ا‬7‫ ا‬F‫ إ‬Q‫ ﻡ‬7 ‫ ا‬,10 ‫ ء‬0‫أﺙ‬
Close(f);

M ‫ل‬."

DataStrcture 63 ‫ب‬ ‫ا‬/‫أ‬


@ ً 1*‫ ﻡ‬B501.txt F* drive D * J3 .‫ﺙ‬
This is my first File
Done with pascal program
... ‫ ا رة‬H O W‫ و; ذ‬file created 5‫ أن ا‬F‫ رة إ‬R‹ Q‫ ﻡ‬7 ‫ ا‬,10 R R F*
‫ ح‬0 6 ;>

var
F:text;
begin
assign(f,'d:\1.txt');
rewrite(f);
writeln(f,'This is my first File');
writeln(f,'Done with pascal program');
writeln('...file created');
readln
end.
d3D J +_‫ ا* أ‬,10 3  OMy computer F‫ ا;(ل إ‬.‫ ﺙ‬dirve D
6 3‫; ﻡ آ‬3‫ ا د و‬7O  31 (1) F@ C` *‫ ﻡ‬W 0‫; أن ه‬3‫و‬

‫اءة‬9+ +(‫ ا‬a*


‫ ا رة‬N7E  ‫اءة‬7* +B5 CY 0 4 ً ‫ أو‬J ً @‫ ت ﻡ* ﻡﺝد ﻡ‬3‫  ﻡ‬O
Reset(f);
‫?;ام ا رة‬3  *‫اءة ﻡ ا‬7‫ ا‬.3 ‫و‬readln C`0‫ ا‬7Y3‫ ا* وا‬.   3‫ﻡ‬
string*‫وءة ﻡ ا‬7‫ ا* ا‬H‫ وﺽ‬D .3 ‫ي‬,‫ا‬
readln(f,st);
Q‫ ﻡ‬7 ‫?;م ا‬3@ N @‫ ا* ا‬CD 0 3‫اءة ﻡ آ‬7‫و‬

var
F:text;
st:string;
begin
assign(f,'d:\1.txt');
reset(f);
while not eof(f) do
begin
readln(f,st);
writeln(st);
end;
close(f);

readln
end.

DataStrcture 64 ‫ب‬ ‫ا‬/‫أ‬


Mc +(‫ ا‬a*
7‫ﻡ‬:‫ ا‬N7E  D ‫ ا* ‹ﺽ‬B5 4 ً ‫ أو‬J ً @‫ ﻡ‬l0‫ ت ﻡ* ﻡ‬3‫ ﻡ‬F‫ إ‬D ‫‹ﺽ‬
Append(f);
*‫  ا‬5 ‫ ;أ ﻡ‬3  3‫ ا د * ً  ن ا‬7O  *  3‫ ا‬.3 W‫ ; ذ‬.‫ﺙ‬

var
F:text;
begin
assign(f,'d:\1.txt');
append(f);
writeln(f,'this is a pascal program');
writeln(f,'success of append operation');
close(f);
writeln('...file altered');
readln
end.

‫ﻡ= ل‬
C`0‫ ا* ا‬CD 100 F‫ إ‬1 ‫ر> م ﻡ‬:‫ ا‬H O Q‫ ﻡ‬7 J3‫ اآ‬numbers F* ‫اﺝد‬
drive E

ar
F:text;
i:integer;
begin
assign(f,'E:\Numbers.txt');
rewrite(f);
for i:= 1 to 100 do
writeln(f,i);
close(f);
writeln('...created');
readln
end.

DataStrcture 65 ‫ب‬ ‫ا‬/‫أ‬


‫ل‬."
F* 5 O‫ و‬C @‫ ا‬5O‫ وو‬5‫ وﺝ; ﻡ‬N @‫;اد ﻡ ا* ا‬:‫أ ا‬7 Q‫ ﻡ‬7 J3‫اآ‬
R l‫ا‬
ar
F:text;
i,sum,Avg:integer;
begin
assign(f,'E:\Numbers.txt');
reset(f);
sum:=0;
while not eof(f) do
begin
readln(f,i);
sum:=sum+i
end;
close(f);
Avg:=sum div 100;
writeln('summation=',sum,' .. and Averrage=',Avg);
readln
end.

‫ل‬."
N @‫ ت ا* ا‬3‫ ﻡ‬2 Q‫ ﻡ‬7 . numbers ‫ول‬:‫ ا* ا‬F‫( إ‬1)

var
F1,F2:text;
i,sum,Avg:integer;
begin
assign(f1,'d:\1.txt');
assign(f2,'E:\Numbers.txt');
append(f1);
reset(f2);
while not eof(f2) do
begin
readln(f2,i);
writeln(f1,i);
end;
close(f1);
close(f2);
writeln('Flile content Added');
readln
end.

DataStrcture 66 ‫ب‬ ‫ا‬/‫أ‬


 ‫ات ا‬
 4‫ و‬records ‫ _ت‬F* ‫ي‬3 ‫ ت‬1*‫ أي ﻡ‬، ‫ ت ا@_ت‬1*‫ ﻡ‬C‫ ه‬0‫ ت ا‬1*‫ا‬
‫ ﻡ‬5‫اﺽ‬73‫  ا‬C3‫` ا‬0‫ ت ا‬1*‫ ﻡ ا‬K0‫ ا‬F* ‫   ل‬Q‫اﻡ‬7 7  4‫ إ‬5‫اﺽ‬73‫ا‬
.‫;وز‬0‫ ا‬l3@‫ﻡ‬

.‫ ﺙ‬4
ً ‫ ا* أو‬CD 5 (‫اد إد‬7‫ ا@_ت ا‬B5 0* J 0‫ ت ا‬1*‫ ا‬H‫ ﻡ' ﻡ‬3*
C`0‫`ص دا(' ا* ا‬0‫ ا‬H‫ وﺽ‬7E ]10 *‫ دا(' ا‬5‫وﺽ‬

:*‫ ا‬F* ‫ا* ت‬

C`0‫ ا* ا‬7E ]10  CO0‫ ا‬.4  ** C< B1‫ ا‬.4‫ ا‬x‫ ر‬.3

assign(F,'d:\Student');

rewrite 7‫ﻡ‬:   3* 3D .3‫و‬

rewrite(F);

reset 7‫ﻡ‬:  ‫اءة‬7* 3D‫و‬

reset(F);

close 7‫ﻡ‬:  >_{‫وإ‬

close(F);

append 7‫ﻡ‬:  * D ‫ﺽ‬U‫وا‬

Append(F);

.*‫ ا‬7 ' > 4


ً ‫ ا@' أو‬7 J 8 C`0‫ ا* ا‬7  17 *3?‫و‬
.4‫ وا‬ID C‫ ا ﻡ‬.>7‫  ﻡ ا‬3‫_ب ا‬O‫  ت ا‬F* ‫ي‬3 ' 0; ‫ض أن‬7310‫و‬
C 3‫' ا‬l‫ ا‬F* 4
ً ‫ أو‬17 J name

Type

Student=Record

ID: integer;

Name: string;

end;

DataStrcture 67 ‫ب‬ ‫ا‬/‫أ‬


C 3‫' ا‬l  '@‫ ا‬F* ‫ دًا‬3‫ ا* ا‬7 .3‫و‬

F:file of Student;

F@ *‫ ﻡ‬CD ‫ن ا@_ت‬B? .‫ _ت ﺙ‬CD 5/1‫_ب و‬E 5 ‫أ  ت‬7 Q‫ ﻡ‬7 C* D‫و‬
R l‫ ا‬F* 5 O‫أ  ت ا* و‬7 W‫ و; ذ‬. student

uses crt;
Type
Student=Record
ID: integer;
Name: string;
end;
var
St:student;
F:file of Student;
i: integer;
begin
clrscr;
assign(F,'d:\Student');
rewrite(F);
for i:=1 to 5 do
begin
writeln('Enter student No');
read(st.ID);
writeln('Enter Student Name');
read(st.name);
write(F,st);
end;
close(F);
reset(F);
while not eof(F) do
begin
read(F,st);
writeln(st.ID,' ',st.name);
end;
close(F);
readln;
end.

DataStrcture 68 ‫ب‬ ‫ا‬/‫أ‬

You might also like