You are on page 1of 69

:

-1
-:
/ .
/ .
-:
oh notation / . (O(N
/ . log 2
(O(N
.


:
-:
((O(N1) + O(N2) = O(MAX(N1,N2
. N1>>N2
: oh notation :
For i :=1 to N do
; (Read (x
. (O(N
: :
For i:= 1 to n do
For j :=1 to n do
; (Read (x
. (O(N2
:
For i:= 1 to n do
; (Read(x
; (Read(y
. (O(N)+O(1
N2>>N1
. (O(N
:
oh notation :
; sum = 0
/1
for I := 1 to n do
;sum := sum + 1
1

k := n * n ;
/2
for I := 1 to n do
for j :=1 to k do
sum := sum + 1 ;
for i:= 1 to n do
/3
for j := 1 to I do
;sum := sum + 1


N
N/2
N/2
X =X .X
N
N
N-1/2
N-1/2
X =X
.X
.X
N
N
X :
oh notation

; Function power(x,n:integer ):real
Var
; Sum:real
; I : integer
Begin
; Sum:= 0
For I := 1 to n do
; sum := sum x
; power := sum
; end
:
Function power(x,n:integer):real;
Begin
If n = 0 then power :=1
Else
If odd (n) then
((Power := x * sqr(power (x,n div 2
Else
; ((Power :=sqr (power (x,n div 2
; End

X62
(O(62
-:
X62 = X31 . X31
X31 = X15 . X15 . X
X15 = X7 . X7 . X
X7 = X3 . X3 . X
X3 = X2 . X
X62 . (O(5


) .
(

.

.

STACKS

-:

). (TOP
LIFO LAST IN
FIRST OUT .


.
-:
.
-1
. PUSH
FULL


. STACK OVER FLOW
3

-2 .
. POP
EMPTY
.
STACK UNDER
. FLOW
-:
-1 .
-2 .


MAXSTACK
BOTTOMMOST
. TOP
-:
CONST
; MAXSTACK = 100
TYPE
STACK = RECORD
; ITEM : ARRAY [1..MAXSTACK] OF INTEGER
; TOP : 0..MAXSTACK
; END
VAR
;S : STACK
-: EMPTY
.
.
EMPTY TRUE
FALSE .
.
VALUE PARAMETER
.
-:
; Function empty (s:stack):boolean
Begin
If s.top = 0 then
Empty := true
Else
; Empty := false
4

;End

-:
; )'If empty (s) then write('stack is empty
-: Full
.

. MAXSTACK
FULL TRUE
FALSE .
PARAMETER .
VALUE PARAMETER
.
; Function full (s:stack):boolean
Begin
If s.top = maxstack then
Full := true
Else
; Full := false
;End
-:
; )'If full (s) then write ('stack is full
stacktop
.
; Function stacktop (s:stack ) : integer
Begin
)'If empty (s) then write ('stack is empty
Else
; ]Stacktop := s.item [s.top
; End
-:

stack
.
; Uses stack
Begin
5

Writeln(' input your decimal number ') ;


Read(n) ;
Repeat
X := N mod 16 ;
Push (s,x) ;
N := n div 16 ;
Until n = 0 ;
Writeln(' your number in hex-decimal is ') ;
While not empty (s) do
Begin
Case pop(s) of
10 : write ('A') ;
11 : write ('B') ;
12 : write ('C') ;
13 : write ('D') ;
14 : write ('E') ;
15 : write ('F') ;
else write (pop(s)) ;
end ;
end ;
readln ;
end .
addtop
.
-:
Op2 = pop(s)
If empty(s) then
Element = true
Push( s,op2)
Else
Op1 = pop (s)
Element = false
Push ( s,op1+op2 )
: S
: addtop

addstack
.
-:
Repeat
; Addtop
; Until element
-:
S -:
addstack -:

addstack , addtop
.
) (
-1 . postfix notation
-2 infix notation . posfix notation
-: Postfix notation
.
.+AB

A+B
-:
+ A B Postfix notation
a+b
+ A B
. Postfix Notation
-: Postfix Notation
-1 ) . p
-2 p
3 4 .
-3 . S
-4 ) ( + -:
/ S
OP1 . OP2
/ . OP1 ( + ) OP2
/ ) ( .
7

/ ) . ( 4
-5 ) . ( 2
-6 . S
-7 .
: + A B = A
5. B=3
1
OP2 = POP(S

3
) (Push ( S , A

2
) Push ( S , B

OP2
6

PUSH( S, RESULT

RESULT = OP1 + OP2

4
)( OP1 = POP(S

-:
ABC+D
.A=5 B=3 C=1 D=2

4
PUSH(S,C

3
)PUSH(S,B

2
)(PUSH (S,A

7
( PUSH ( S , D

Infix notation -: Postfix notation


-:
Q . Infix
" ( " " ) " . Q
-1
8

Q 6 3
-2
.
Q ) P
-3
.( Postfix
Q .
-4
Q ) ( )( -:
-5
) ( ) ( +
P .
) ( ) ( S ) . ( 5
Q -:
-6
) ( S P
.
) ( " ( " ) ( S P ) ( 6
.
-7 . 2
-8 .
-:
INFIX . POSTFIX
A-(B+C)*D
1
P = AB
PUSH ( S , C

5
P = ABC+
POP ( S

9
P = ABC+D

2
P=A
) ( PUSH ( S , -

3
P=A

6
P = ABC

7
P = ABC
) ( PUSH ( S , +

10
P = ABC+

11
P = ABC+
9

4
P=A

8
P = AB

12
P = ABC+

PUSH ( S

13
* P = ABC+DPOP ( S

) ( + , POP ( S

15
14
*P=ABC+D* P = ABC+D
) ( POP ( S

16
P = ABC+D

-:
-1 *(AB C (POSTFIX NOTATION
C=2
, B=3
, A = 17
-2 + * - ABCD
D = 13
, C = 18 ,
B = 2 , A = 25
.
3 POSTFIX NOTATION
-:
A+B*C
/
A + B) * C ) /
(A * B / C ) / (A - D) /

-:
postfix
.
;('Value :=Ord (ch)-ord('0

; Program evalute
Const
; Maxarray = 50
Type
; Arr = array [ 1..maxarray ]of char
Var
10

; X : arr
; Position : 1..maxarray
; Function eval ( x : arr ) :real
Const
; Maxstack = maxarray
Type
Stack = record
; Item : array [ 1..maxstack ] of real
; Top : 0..maxstack
; End
Var
; St : stack
; Opnd1 , Opnd2 , Value : real
; Ch : char
; Position : 1..maxarray
; Function pop (var s:stack):real
{ body of pop }
;(Procedure push (var s:stack;x:real
{body of push}
; Function op(ch:char):boolean
{body of op}
; function oper (ch:char ;op1,op2 : real) : real
{body of oper}
{begin {function eval
;st.top:= 0
;position := 1
;[ch:=arr[position
while ch < > ' ' do
{ begin{ is found
if op(ch)then
begin
;('value :=ord(ch)-ord('0
;(push(st,value
end
else
{begin{operator is found
;(opnd2:=pop(st
11

;(opnd1:=pop(st
;(value:=oper (ch,opnd1,opnd2
;(push(st,value
end
if position < maxarray then
begin
;position:= position + 1
;[ ch:=arr [ position
end
else
; ' ' =:ch
;end
;(eval:= pop(st
;end
begin
;('write('enter your postfix expression
for i:= 1 to maxarray do
; ( [ read ( arr [ position
; readln
;(' writeln(' original postfix expression is
for position:=1 to maxarray do
; ( [ write ( arr [ position
;((writeln('value of postfix is ',eval(arr
;writeln
.end

-:
Op
-1
False true
.
:
; Function op (ch:char):boolean
Begin
(('If (ord(ch)>=ord ('0')) and (ord(ch)<= ord('9
Then op:=true
Else op:=false
12

; End
oper
-2
.
:
; Function oper (ch:char ;op1,op2 : real ) : real
Begin
If ch in [' + ' , ' * ' , ' - ' , ' / ' ] then
Case ch of
;oper :=op1 + op2: '+'
;oper :=op1* op2: '*'
;oper :=op1 - op2: '-'
;oper :=op1 / op2: '/'
end
else
; ( 'writeln('error illegal operator
; end
-:
-3
.
-: -4
; Function factorial ( n : integer ) : real
Begin
If n=0 then factorial:=1
Else
;( Factorial := n*factorial ( n - 1
; End
-:
;function factorial(n:integer ) : real
var
;s:stack
;fact:real
begin
; (initialize(s
while (n>0) and (not full(s)) do
begin
;(push(s,n
; n:=n-1
; end
13

if (n>0) and (full(s))then


begin
;factorial:=-1
; ( ' writeln( ' stack over flow
end
else
begin
; fact:= 1
while not empty(s) do
begin
; (pop(s
; fact:=n*fact
; end
; factorial := fact
;end
;end
-:

.
-1 .
-2 .
- .
- .
- .
- .
-:
-:
-1 2 .
-2 .
) (1 ) (2 .
-3 .
-:
Stack
.
14

; Uses stack
Begin
;(' Write ('input your decimal number
;(Read (n
Repeat
;X:=n mod 2
;(Push (s,x
;N:= n div 2
; Until n=0
While not empty (s) do
; ((Writeln(pop(s
;Readln
.End
8
. 2
-:

-1
. 10
A 11 B ... .
-2 .
-:
Addtop . Addstack

Queues


head,front
tail,rear . FIFO
)(first in first out
first in fist services
.
-:
. linear Queue
-1
. Circular Queue
-2
-:
15


-:
-1 .
Rear = front = 0
-2
.
Rear = 0
Front = 1
-3 .
Rear = 0
Front = 0
-4
.
Rear = 0
Front = 1
.

-:
-1 .
-2 .
-3
.
-4
.
-5 -:

.1
.
A
.2
.
16

B
.3
.
A
.4
.
B
.5
) .
A
.6
.
B
.7
.
C
.8
.
-:
Insert
-1

; (Insert(Q,A
-2 Delete

;(Delete(Q
-:

rear , front
front rear
.
Const
;MaxQueue=100
type
Queue=record
;Item :array [ 0.. MaxQueue-1] of integer
; Rear , front :integer
;End
Var
; Q:Queue
-:empty
17

parameter .
-1
-2 value parameter -
-3 .
-4 .
-5 : true false
-:
; Function empty( Q:Queue):boolean
Begin
If Q.rear := Q.front then empty := true
Else
;Empty:= false
;End
-: empty

. Under flow
-:
; ('If empty (Q) then writeln('Queue empty
-: full

-1

parameter .

-2

value parameter .

-3
.

-4
. rear +1 mod maxQueue = front

-5
-: true . false
-:FULL
; Function full(Q:Queue):boolean
Begin
With Q do
If rear+1 mod maxQueue = front then full :=true
Else
; Full := false
;End
-:full
18


) over flow ( .
-:
;('If full (Q) then writeln ('Queue is full
-:insert

-1

parameter .

-2

) variable parameter
. (value parameter

-3
.

-4
-:
. - .
- .
-:
;(Procedure insert (var Q:Queue ; x : integer
Begin
If full (Q) then
('Writeln ('Queue is full
Else
Begin
; Q.item [Q.rear]:= x
; Q.rear := Q.rear +1 mod maxQueue
;End
;End

-: delete

-1

parameter .

-2

variable parameter :
19

-3
: .
-4
-:
. - .
- .
-:
Function delete(var Q:Queue):integer
Begin
('If empty (Q) then writeln('Queue is empty
Else
Begin
;[Delete :=Q.item[Q.front
;Q.front :=Q.front +1 mod maxQueue
;End
;End
-: Initialize
-1

parameter .
-2

. variable parameter
-3

.
-4
.
;(Procedure initialize ( var Q : queue
Begin
;Q.front:= 0
;Q.rear:= 0
;End

20

-: display
-1
.
-2
: .

-3

) (for downto )for-
. (to
: parameter .

-4
value parameter .
-:
;(Procedure display (Q:Queue
Var
;I:integer
Begin
If Q.fron > Q.rear then
For I := Q.front downto Q.rear do
; ( ' ',[Write ( Q.item[i
Else
for I :=Q .front to Q.rear do
; (' ', [write (Q.item[i
; end

21


.
-:
-1 . rear=0 , front = 1
-2 . rear < front
-3 .
Rear = maxQueue
.
.

-:

-1
.

-2
.

-3


.

-4
.
-:

.

22

Const
; MaxQueue = 100
Type
Queue = record
; Item:array[1..maxQueue] of integer
; Rear , front : integer
;End
Var
; Q:Queue
-: Full
;Function Full (Q : Queue ):Boolean
Begin
If Q.rear = maxQueue then full := true
Else
; Full :=false
;End
:
;Function full (Q:Queue):boolean
Begin
; Full:=Q.rear = max
; End
-: empty
; Function empty(Q:Queue):boolean
Begin
If Q.front > Q.rear then empty := true
Else
; Empty := false
;End
-:
; Function empty (Q:Queue):boolean
Begin
;(Empty := (Q.front=1) and (Q.rear = 0
;End
-: delete
; function delete (var Q:Queue):integer
begin
('if empty (Q) then write ('Queue is empty
23

else
begin
; [delete :=Q.item[Q.front
; Q front :=Q.front + 1
;End
; (If Q.front >Q.rear then initialize (Q
; End

-:

.
initialize
;(procedure initialize(var q:queue
begin
;q.rear:=0
;q.fornt:=0
;end
:
1.
.
Rear=front=0
2 . rear=0 , front=1
3 .
.

) (
.
-1
-1
.
-2
.
2 .:
24

;(Procedure addqueue(var Q1:queue1;var Q2:queue2


Var
;I:integer
Begin
If (Maxqueue1-(Q1.rear)<maxqueue2)then
;('Write('can not addqueue
Else
For I:=Q2.front To Q2.rear do
Begin
;Q1.rear:=Q1.rear+1
;[Q1.item[Q1.rear]:=Q2.item[I
;End
;(Initialize(Q2
;Readln
;end
:
.
-:
;(Procedure search(q:queue;target:integer
Begin
While(q.front<=q.rear) do
Begin
(If target=q.item[q.front] then writeln(target, is found
Else
;q.front:=q.front+1
;end
;(if q.front>q.rear then writeln(target, is not found
;end
-:

.
.
-:
If target=q.item[q.front] then
;(Writeln(target, is found
;Readln
;Exit
25

End
Else
;q.front:=q.front+1
exit .

Pointers


).( Dynamic data type
nodes .
.

-1
.

-2
overflow .
:
Var
;Pointer_variable:^data type

Type
;Pointer_variable=^data type
:
Type
;Node_pointer=^node
Node=record
;Name:string
;Age:integer
;End
Var
;P,R,Q:node_pointer
26

;X:^integer
;Y:^string

New
.
:
;(New(Pointer_variable
:
;(New(p
;(New(Q
;(New(R
-:
(New(p

emaN
egA

(New(Q

emaN
egA

(New(R

Name
Age



:

;P:=Q
27


.Q

)(pointer_name^.field
P P^.name

P P^.age

:
type
;nodepointer =^node
node=record
;name:string
;age:integer
;end
var
;P,R,Q:nodepointer
Begin
;(New(P
;(New(Q
;(New(R
;'P^.name:='ali
;'Q^.name:='ahmed
;P^.age:=25
;Q^.age:=75
;P:=Q
;R:=P
;(Writeln(P^.name,P^.age,Q^.name,R^.name
.End
-:
Ahmed 75 Ahmed Ali

28

Dispose
.

;(Dispose(pointername
Nil
.

:
P1,P2,P3,P4
P4
rat

P2

P3
ewe

dog

P1
cat

.2

;P4:=P1^.data .1
;P4^.data:=P1^.data
;P4^.next:=P1

;P4^.next:=P3^.next.3
;P3^.next:=P2^.next
;P2^.next:=P1^.next
;P2^.next.P3^.data:=P^.data .4

29

head

) linked list (
.
head nil
.

.

.
.
Type
;Lptr=^listnode
Listnode=record
;Data:integer
;Next:lptr
;End

.
-1

Lptr.
-2

Nil.
;Function creatlist:lptr
Var
;P:lptr
30

Begin
;(New(p
;Creatlist:=p
;End
creatlist
.
;head:=creatlist.
head .

.
nil

head

getnode
listnode newlptr
data next nil.
;Function getnode:lptr
Var
;Newlptr:lptr
;Value:integer
Begin
;('Writeln('enter integer value to add to the list
;(Read(value
;(New(newlptr
With newlptr^ do
Begin
;Data:=value
;Next:=nil
;End
;Getnode:=newlptr
;End
:
.

-1
listnode
.
31


-2

.

-3
( 2)
.

-4
.

:
;(Procedure add(var head,newptr:lptr
Var
;Temp:lptr
Begin
If head=nil then head:=newptr
Else if (newptr^.data=head^.data) then writeln('this value is
('already in the list
Else if (newptr^.data<head^.data)then
Begin
;Temp:=head
;Head:=newptr
;Newptr^.next:=temp
End
Else if
(newptr^.data>head^.data)and(newptr^.data<head^.next^.data)then
Begin
;Temp:=head^.next
;Head^.next:=newptr
;Newptr^.next:=temp
End
Else
32

;(Add(head^.next,newptr
;End
:
:

-1

nil target,pred
-2
target pred nil

-3
,
target
pred .
-4 )( ).(3

-5
nil
.target,pred

;(Procedure search(head:lptr;x:integer;var target,pred:lptr


Begin
If head=nil then
Begin
;('Writeln(x,'is not found
;Target:=nil
;Pred:=nil
End
Else if head^.data=x then
Begin
;Target:=head
Pred:=nil
End
Else if head^.next^.data=x then
Begin
;Target:=head^.next
;Pred:=head
33

End
Else if (x>head^.data)and(x<head^.next^.data)then
Begin
;('Writeln(x,'is not found
;Target:=nil
;Pred:=nil
End
;(Else search(head^.next,x,target,pred
;End
.
search

.


.dispose
:

-1

.target,pred

-2
target nil
.

-3
target .nil pred nil
) (.
- head .
- dispose .

-4
target,pred nil .

.1
.pred^.next=target^.next

.2
dispose .target
.
;(Procedure delete(var head:lptr;x:integer
34

Var
;Target,pred:lptr
Begin
;(Search(head,x,target,pred
('If target=nil then writeln('this node is not found
Else if (target=head)and(pred=nil)then
Begin
;Head:=head^.next
;(Dispose(target
End
Else if target^.next=nil then
Begin
;Pred^.next:=nil
;(Dispose(target
End
Else
Begin
;Pred^.next:=target^.nextr
;End
;End

:

.
:
-: nil target
.head^.data .1
.head=head^.next .2

;(Procedure printlist(head:lptr
Begin
While head<>nil do
Begin
35

;(Writeln(head^.data
;Head:=head^.next
;End
;End

Sort

.

. -:
bubble sort
-1
selection sort
-2
insertion sort
-3
quick sort

-4
heap sort

-5
shell sort

-6
. -:
merge sort
36

.
bubble sort
.
A N -:
.1 [A[1]<A[2
[A[2]<A[3
[A[N-1]<A[N
. [A[N
.2 ) (1
. [A[N
.3 ) N-1 (2
[A[1]<A[2 .
-:
.1 2 3 K= 1 TO N-1
.2 J=1
.3 J<=N-K
[A[J]>A[J+1 .
. J=J+1
.4 .3
.5 .1
.

]5]A] 6]A

]3]A] 4]A

]]A[12]A

5
]5]A] 6]A

]3]A] 4]A

]2]A

]1]A

]5]A] 6]A

]3]A] 4]A

]2]A

]1]A

]5]A] 6]A

]3]A] 4]A

]2]A

]1]A

]5]A] 6]A

]3]A] 4]A

]2]A

]1]A

17
17
17
37

4
5
12
12

17
4
5
8

8
[A[1
[12
A[1

4
[A[1
5
[A[1

12
8
8
4

7
[A[1

12

17

;Program bubble
Const
;N=10
Var
;A:array [1..n] of integer
;I,j,k,temp:integer
Begin
For I:=1 to n do
The
intering
;([Read(a[I
For k:=1 to n-1 do
Begin
;J:=1
While j<=(n-k) do
Begin
If a[j]>a[j+1] then
Begin
;[Temp:=a[j
;[A[j]:=a[j+1
;A[j+1]:=temp
The sorting
;End
;J: =j+1
;End
The output
;End
For I:= 1 to n do
;([Write(a[I
.End
n*(n-1)/2
.

38

selection sort
n
.

[a[i [a[2 [a[n
[a[2 [a[3 [a[n [a[3
.
.
[A[5 [A[6

[A[3 [A[4

[A[1 [A[2

5
]5]A] 6]A

]3]A] 4]A
39

]]A[12]A

17

8
[A[1

12

12

[A[1

17

5
]A[12]A]

17

17

17

12

3]A] 4]A]

5]A] 6]A]

2]A]

3]A] 4]A]

5]A] 6]A]

12
1]A]

2]A]

12
1]A]

5]A] 6]A]

12
1]A]

3]A] 4]A]

2]A]

3]A] 4]A]

5]A] 6]A]

17

-:
I=1 .1
. [A[N [ A[I 2.
.[A[I .3
I=I+1 .4
N I=N .5
.2
;(Procedure selectsort(var table:array[1..10]of integer;n:integer
Var
;Maxpostion:integer
;Function findmaxpos(var table:array[1..10]of integer;n:integer):integer

Var
;I,maxpos:integer
Begin
;Maxpos:=1
For I:=2 to n do
;If table[I]>table[maxpos] then maxpos:=I
;Findmaxpos:=maxpos
;End
;(Procedure exchange(var x,y:integer
Var
;Temp:integer
Begin
40

;Temp:=x
;X:=y
;Y:=temp
;End
Begin
If n>1 then
Begin
;(Maxpostion:=finmaxpos(table,n
;([Exchange(table[maxpostion],table[n
;(Selectsort(table,n-1
;End
;End
-:
Const
;N1=100
Type
;X=array[1..n1]of integer
;(Procedure selectsort(var a:x;n:integer
Var
;I,j,s,k:integer
Begin
For j:=1 to n-1 do
Begin
;K:=j
;[S:=a[j
For I :=j+1 to n do
Begin
If a[I]<s then
Begin
;[S:=a[I
;K:=I
;End
{End;{for
;[S:=a[j
;[A[j]:=a[k
;A[k]:=s
;End
41

{End;{end of procedure

Insertion sort


[A[1

[A[1 [A[2
.
:

]5]A] 6]A

]3]A] 4]A
42

]]A[12]A

12

17

5
]A[12]A]

7
5
5

12
7
7

8
12
8

17
8
12

3]A] 4]A]

5]A] 6]A]

5
1]A]

2]A]

3]A] 4]A]

5]A] 6]A]

1]A]

2]A]

3]A] 4]A]

5]A] 6]A]

17
17

-:
. I=1
-1
. [A[n [ A[i
-2
. X
-3
[ A[i
-4
.
. A[i]=X
-5
. I=I+1
-6
. 2 I=N
-7


;(Procedure insertsort(var table:array[1..10]of integer;n:integer
Var
;Nextpos,newpos, nextval:integer
Procedure shiftbigger(var table:array[1..10]of
;(;integer;nextpos,nextval:integer;var newpos:integer
Begin
While(nextpos>2)and(table[nextpos-1]>nextval)do
Begin
;[Table[nextpos]:=table[nextpos-1
;Nextpos:=nextpos-1
43

;End
If table[1]>nextval then
Begin
;[Table[2]:=table[1
;Newpos:=1
End
Else
;Newpos:=nextpos
{End;{end of procedure shift
{Begin{begin of insertsort
For nextpos:=2 to n do
Begin
{Nextval:=table[nextpos];{save next element
;(Shiftbigger[table,nextpos,nextval,newpos
;Table[newpos]:=nextval
;End
;End

quick sort

, first
. first first
first
Last
Loc
-:
last first x Quick sort -
. partition last first
44


(O(n log2 n

(O(N2
_: 32 N
2
N =322=1024

N log2 n=32 log2 32=160

-:

;(Procedure quick_sort (var x: art ; first , last:integer


Begin
If (first <last) then
Begin
;(Partion (x, first, last, loc
;(Quick_sort (x, first, loc-1
;(Quick_sort (x, loc + 1, last
;END

-:partition

;(procedure partition(var x:art; first , last:integer; var loc:integer


Var
;Pivot, i: integer
Begin
;I: =first
;Loc: =last + 1
;[Pivot: =x [first
While I < loc do
BEGIN
repeat
;I: =I + 1
Until x [i] >= Pivot
repeat
;Ioc: =loc-1
45

Until x [loc] <= Pivot


If I < loc then
;( [Swap (x [loc], x [I
;END
;( [Swap (x [loc] , x[first
;END
. type Art
-:

.
.

;Program exchangesort
Const
;Max=100
Type
;List=array[1..max]of string
Var
;Name:list
;Temp:string
;I,j:integer
;Choice:boolean
;File1,file2:text
Begin
;('Assign(file1,'c:\datain.dat
;('Assign(file2,'c:\dataout.dat
;(Reset(file1
;(Rewrite(file2
46

;I:=0
Repeat
;I:=i+1
;([Readln(file1,name[i
;(Until eof(file1
Repeat
;Choice:=true
For j:=1 to i-1 do
If name[j]>name[j-1] then
Begin
;Choice:=false
;[Temp:=name[j
;[Name[j]:=name[j+1
;Name[j+1]:=temp
;End
;Until choice
For j:=1 to i do
;([Writeln(file2,name[j
;(Close(file1
;(Close(file2
.End

47

Search
.

.
:
-1 ) (item
A[N+1]=item
-2 . Loc = 1
-3 ]item A[Loc
Loc = Loc + 1 -1
-2
-4 Loc = N + 1
. Loc

:
3

1
8

3
3

48

2
3

1
1
3

= N + 1 = 4 N

1
8

13

Loc=1
A[Loc] item A[1] 3 13 3
Loc 2
A[Loc] item A[2] = 3 3 = 3

3 .

30

3
0

3
1
8

2
3

1
1
3

A[Loc] item
( A[1] 30 ) ( 13 30) True
A[2] item
( 3 30) True
A[3] item
(18 30) True
A[4] item
(30 30) False

Loc
1

Loc
2

Loc
3

Loc
4

* Loc = N+1
Loc
.30

; program test
const
;m=10
var
; A : array [1..10] of integer
49

; Loc , N , I , item : integer


Begin
; N:= m-1
For I:= 1 to N do
Begin
; ([,Writeln (enter A[,I
; ([Readln(A[I
; End
; (Writeln (enter your item
;(Readln(item
; A[N+1]:= item
;Loc:=1
While A[Loc] <> item do
Begin
;Loc := Loc + 1
; End
If loc=n+1 then
(Writeln(item is not found
else
(Write (item Loc = ,Loc
; Readln
.End

( )


50

.





.
:
-1 .
-2 )
(
.
-3
.
-4
)
. (1
-5
) (1 +
.

:
8

9
9

9
0

4
0

3
3

2
1

51

3
9

2
3

1
1

2/ + =
:
.33
:
(1+ 8)2/=
4
target = 33
false IF(A[4] = target)
[21 A[4 =
33

3
3

4
0

9
0

9 33
9

)5 + 8 2/(=
(false

6
IF( A[6] = 33

A[6]= 40 33

3
3

4 33
0

)5 + 6 2/(= 5


(True IF( A[5] = 33

A[5]= 33
5 33

; program test2
type
data = array[1..10] of integer ;
var
I, B, target : integer ;
A : data ;
Function binsearch(var A:data ; target : integer) : integer ;
Var
Last, First, Midd : integer ;
Begin
First := 1;
52

Last := 10;
Repeat
Midd := (First + Last) div 2 ;
If A[Midd] > target then
Last := Midd 1
Else
First := Midd + 1 ;
Until (First = Last) or (A[Midd] = target);
If A[Midd] = target then
Binsearch := Midd
Else
Binsearch := 0;
End ;
Begin
For I := 1 to 10 do
Begin
Writeln (enter A[,I,]) ;
Readln (A[I]) ;
End ;
Writeln (enter target : ) ;
Readln (target) ;
B:= Binsearch (A,target) ;
Write (target = ,B) ;
Readln ;
End.
Stack Using Array
type
Const
;Maxstack=100
Type
Stack=record
;Item:array[1..maxstack]of integer
;Top:0..maxstack
;End
Var
;S:stack
53

;I:integer
;(Procedure initialize(var s:stack
Begin
;s.top:=0
;end
;function full(s:stack):Boolean
begin
if s.top=maxstack then full:=true
else
;full:=false
;end
;function empty(s:stack):Boolean
begin
if s.top=0 then empty:=true
else
;empty:=false
;end
;(procedure push(var s:stack;x:integer
begin
('if full(s) then write('stack is full
else
begin
;s.top:=s.top+1
;s.item[s.top]:=x
;end
;end
;function pop(var s:stack):integer
begin
('if empty(s) then write('stack is empty
else
begin
;[pop:= s.item[s.top
;s.top:=s.top-1
54

;end
;end
;function stacktop(s:stack):integer
begin
('if empty(s) then write('stack is empty
else
;[stacktop:=s.item[s.top
;end
;(procedure display(s:stack
var
;I:integer
Begin
For I:= s.top downto 1 do
;(' ',[Write(s.item[I
;End
begin
;(initialize(s
;(push(s,3
;(push(s,5
;(push(s,7
;(push(s,2
;(display(s
;readln
.end

Stack Using Pointer


;Uses crt
Type
;Stack=^data
Data=record
;Item: integer
;Next:stack
;End
Var
;S:stack
;x:integer
55

;(Procedure initialize(var st:stack


Begin
;St:=nil
;end
;function empty(st:stack):Boolean
begin
if st=nil then empty:=true
else
;empty:=false
;end
;(procedure push(var st:stack;x:integer
;p:stack
begin
;(new(p
;p^item:=x
;p^.next:=st
;st:=p
;end
;end
;function pop(var st:stack):integer
var
;p:stack
begin
if empty(st) then
begin
;pop:=0
;('write('stack is empty
end
else
begin
;pop:= st^.item
;p:=st
;st:=st^.next
(dispose(p
;end
;end
56

;function stacktop(st:stack):integer
begin
('if empty(st) then write('stack is empty
else
;stacktop:=st^.item
;end
;(procedure display(st:stack
Begin
While st<>nil do
Begin
;(Write(st^.item
;St:=st^.next
;End
begin
;(initialize(s
;(push(s,3
;(push(s,5
;(push(s,7
;(push(s,2
;(display(s
;readln
.end

Linear Queue Using Array


:
front=1 rear=0

;Uses crt
Const
;Maxqueue=10
Type
Queue=record
;Item:array[1..10]of integer
;Rear,front:integer
;End
Var
57

;Q:queue
;I:integer
;(Procedure initialize(var Q:queue
Begin
;q.rear:=0
;q.front:=1
;end
;function full(q:queue):Boolean
begin
;full:=q.rear=maxqueue
;end
;function empty(q:queue):Boolean
begin
;(empty:=(q.front=1)and(q.rear=0
;end
;(procedure push(var q:queue;x:integer
begin
('if full(q) then write('queue is full
else
begin
;q.rear:=q.rear+1
;q.item[q.rear]:=x
;end
;end
;function delete(var q:queue):integer
begin
('if empty(q) then write('queue is empty
else
begin
;[delete:= q.item[q.front
;q.front:=q.front+1
;end
58

;end
;(procedure display(q:queue
var
;I:integer
Begin
For I:= q.rear to q.front do
;(' ',[Write(q.item[I
;End
Begin
;(Initialize(q
For I:=1 to 4 do
;(Insert(q,i
;(Display(q
;Readln
.End

tree
branches

.
-:

:
. root
.1
n>=0 tl..tn
.2
th..tn subtrees
.

59

13 Node
. A
.
degree of node
a 3 c 1
k leaf
terminal node } {k,l,g,m,I,j

nonterminal node .
x children
x x parent d
j,I,h d . a
siblings j,i,h
. d
-: degree of tree
. 3
-: level of tree
L L+1
1 d . 2
-:height of tree
. 3
-: forest
n>=0 .

a .
-: binary tree
60

.

2 .
-:

left
sudtree right sudtree
.


. .
.
.

binary search tree



:
) ( .
) ( .
.
:

61

5 5
5 5
)T (2 (T (7

Root

.root=nil

.
Type
;P=^nodetype
Nodetype=recod
;Info : integer
;Left, right:p
;End
Var
;Root:p
:

new
integer
.
;function creatptr(r:integer):p
var
;ptr:p
begin
;)new(ptr
with ptr^ do
begin
;info:=r
;left:=nil
62

;right:=nil
;end
;creatptr:=ptr
;end

-:

3 3 5 5>3
2
3 4 3
nil :

: ptl
. pt
;)procedure add(var pt,pt1:p
begin
if pt=nil then
pt:=pt1
else
if ptr^.info < pt^.info then
)add(pt^.left,ptr
else
;)add(pt^.right,ptr
;end
63

: Z
nil
.
;function search(pt:p; z:integer) :p
begin
if pt=nil then
begin
;)' writeln(Z,is not fuond
;search:=nil
end
else
if pt^.info = z then search:=pt
else
)if z<pt^.info then search:=search(pt^.left,z
else
;)search:=search(pt^.right,z
;end

-:



) (3
.
2
2
2
4 --:

64

7
8
(8) 6 ) (
- :

- :
procedure delete (root:p; var found:boolean;k:integer);
var
temp:p;
begin
if root^.info=k then found:=true
else
if root^.info > k then delete(root^.left,found,k)
else
delete(root^.right,found,k) ;
if (found) and (k<>root^.info) then
begin
if root^.left^.info =k then
begin
65

temp:=root^.left;
root^.left:=temp^.left;
end
else
begin
temp:=root^.right;
root^.right:=temp^.left;
end ;
if temp^.right <> nil then
add(root,temp^.right);
found:=false;
dispose(temp);
end;
end;

TYPE
p=^node;
node=record
info:integer;
left,right:p;
end;
var
ptr, newptr ,root:p;
function creatptr(r:integer):p;
var
ptr:p;
begin
new(ptr);
with ptr^ do
begin
info:=r;
left:=nil;
right:=nil;
end;
66

creatptr:=ptr;
end;
procedure add(var pt,ptr:p);
begin
if pt=nil then
pt:=ptr
else
if ptr^.info < pt^.info then
add(pt^.left,ptr)
else
add(pt^.right,ptr);
end;
function search(pt:p; z:integer) :p;
begin
if pt=nil then
begin
writeln(Z,is not fuond ');
search:=nil;
end
else
if pt^.info = z then search:=pt
else
if z<pt^.info then search:=search(pt^.left,z)
else
search:=search(pt^.right,z);
end;
procedure delet (root:p; var found:boolean;k:integer);
var
temp:p;
begin
if root^.info=k then found:=true
else
if root^.info > k then delet(root^.left,found,k)
else
delet(root^.right,found,k) ;
if (found) and (k<>root^.info) then
begin
if root^.left^.info =k then
begin
67

temp:=root^.left;
root^.left:=temp^.left;
end
else
begin
temp:=root^.right;
root^.right:=temp^.left;
end ;
if temp^.right <> nil then
add(root,temp^.right);
found:=false;
dispose(temp);
end;
end; {delete} ;
begin
root:= new(ptr);
root:=nil;
for I:=1 to 10 do
begin
newptr:creatptr;
add(root, newptr);
end;
readln;
end.

linked list .*

._
.5 _
.

68

* -:
_1 ROOT
_2 G .
_3 . C
_4 .
_5 .G
_6 .
_7 .

69

You might also like