Professional Documents
Culture Documents
-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
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
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
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
; 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
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
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
-:
-:partition
;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
( )
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
;Uses crt
Type
;Stack=^data
Data=record
;Item: integer
;Next:stack
;End
Var
;S:stack
;x:integer
55
;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
;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
.
. .
.
.
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