3.lists-slides.pdf

ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ùćŚĺ ýŚûďŚţąŚĺùćŘć
ŚûťÆČó •
ýŘĆÖܧ ,ĆþĄĺøć ,ĆþĄĺŒþ ŚûťÆČó -ĆţÈŢ -Óň -üÜî ýŚûťÆČó -ŚûťÆČó ýŚûćÂŞďŚî --
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
1
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
Śûťąďć •
$
üþøćøć ,üÜî ýŚûťąďć -ŚûöŊ ŚŞ ďŚî ø ŰďŚśä ťąďć -ĄŻøťÆŻ üþøćøć ťąďć --
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
2
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ŚûťÆČó
ťĺŘ Ýúõ ŚûöŊ řČŮÂŮ Ćî ,ÂňŚĂä ěŘ ýŘĆóŚśœć
ñøŘÀţõ ñŚÞäŘ
üúŮ ťÆČó Œþ 挟þŘ •
(ťÆČó ýùěŘÀœŘ) ťÆČó ďć 楯Ąõ ÂňŚĂä ćŘÀãŮ ýĆśĺŚ¡õ •
ťÆČó ýŚúţœŘ Śþ ýŘÀţŞŘ ďć ÂÊĂä Œþ Žďć •
ùÀłùćŘć ÂÊĂä Œþ ěŘ Ûśì Śþ ÀãŞ ÂÊĂä Œþ Žďć •
ťÆČó (ýÀãŞ ÂÊĂä Śþ ,ŚúţœŘ ,ŘÀţŞŘ) ěŘ ÂÊĂä Œþ éÁ§ •
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
3
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
(ĆõŘćŘ) ŚûťÆČó
:ÀœĄłüõ ĆţąŚĂł Âþě üõŚĺŘ ŚŞ ŚûťÆČó ,ÂÊĂä Œþ éÁ§ Śþ Žďć öŚØõ ĆŞ ĆţÆŞ
ťÆČó éÂÏ Œþ ďć ÍÖê éÁ§ ø Žďć :(stack) ĆţÈŢe •
First-In-Last-Out (FILO) Śþ Last-In-First-Out (LIFO)
ýŘÀţŞŘ ěŘ éÁ§ ø ŚúţœŘ ďć ÍÖê Žďć :(queue) Óň •
First-In-First-Out (FIFO)
ýŚûťÆČó ø üśŮŘÂõĆÜÆÜĺ ,ýŘĆÖܧ ,ĆþĄĺøć ,ĆþĄĺŒþ (üÎą) :ýÀœĄČŢ ýŚûťÆČó áŘĄœŘ
üÜî
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
4
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ĆþĄĺŒþ ýÀœĄČŢ ýŚûťÆČó
class Node {
private Object element;
private Node next;
// constructors
Node(){
this(null,null);
}
public Node(Object e, Node n){
element = e
next = n;
}
void setElement(Object newElem){ element = newElem;}
void setNext(Node newNext){ next = newNext;}
Object getElement(){ return element;}
Node getNext() {return next;}
}
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
5
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
first[L]
ýćŚä ýÀœĄČŢ ťÆČó
L
ťÆČóÂĺ
first[L]
L
ďŘćťÆČóÂĺ
ťÆČóÂĺ
üúŮ ťÆČó
L
ťÆČóÂĺ
first[L]
L
ýŘĆÖܧ ďŘćťÆČóÂĺ
ťÆČóÂĺ
L
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
üúŮ ťÆČó
6
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
CLRS ŚŞ ýěŚĺùćŚČŢ
size[L] ø element ,next :ŚûĆÔóĄõ
(Java) ŘøŚŻ
CLRS ÀîĆśł
x = new Node()
x ← Allocate-Node()
x = new Node(element e, next n) x ← Allocate-Node(e, n)
null x
Free-Node(x)
x.getNext()
next[x]
x.setNext(n)
next[x] ← n
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
7
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üÎą ťÆČó Œþ ýøď ÂŞ üÜňŘ ñŚÞäŘ
L üúŮ ťÆČó Œþ 挟þŘ :Create-List(L) •
ÀœŘćÂðüõ ÂŞ Řď ťÆČó ÂňŚĂä ćŘÀãŮ :Size(L) •
ÀœŘćÂðüõÂŞ Řď ñøŘ ÂÊĂä :First(L) •
üóŚą ťÆČó ŚþŊ Ćî ÀĂîüõ É£Èõ :isEmpty(L) •
L ýŘÀţŞŘ ďć x ďŘÀÖõ ŚŞ ýÂÊĂä Žďć :Insert-First(L, x) •
L ďć n ÂÊĂä ěŘ ÅŢ x ďŘÀÖõ ŚŞ ýÂÊĂä Žďć :Insert-After(L, x, n) •
ÀĂîüõ éÁ§ Řď L ťÆČó ñøŘ ÂÊĂä :Delete-First(L) •
ÀĂîüõ éÁ§ Řď L ďć n ÂÊĂä ěŘ ÅŢ ÂÊĂä :Delete-After(L, n) •
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
8
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ýěŚĺùćŚČŢ
Create (L)
1 size [L] ← 0
Size (L)
1 return size[L]
First (L)
1 if Size(L) 6= 0
2
then return first[L]
3
else error list is empty
isEmpty (L)
1 return Size(L) = 0
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
9
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Insert-First (L, x)
1 first[L] ← Allocate-Node (x, First(L))
2 size[L] ← size[L] + 1
Insert-After (L, x, n)
1 if n = null
2
then error element is empty
3 next[n] ← Allocate-Node (x, next[n])
4 size[L] ← size[L] + 1
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
10
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
first[L]
$
next
L
element
L
x
first[L] ← Allocate-Node (x, First(L))
Insert-First(L, x)
first[L]
L
n
x
next[n] ← Allocate-Node (x, next[n])
Insert-After(L, x, n)
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
11
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Delete-First (L)
1 if isEmpty (L)
2
then error list is empty
3 n ← First(L)
4 first[L] ← next[n]
5 Free-Node(n)
6 size[L] ← size[L] − 1
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
12
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Delete-After (L, n)
1 if isEmpty (L) or n = null or next[n] = null
2
then error element does not exist
3 r ← next[n]
4 next[n] ← next[r]
5 Free-Node(r)
6 size[L] ← size[L] − 1
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
13
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
L
first[L] ← next[ first[L]]
Delete-First(L)
n
next[n] ← next[next[n]]
Delete-After(L, n)
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
14
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
&
üĺÀì ÀÞ¡õ
.ťĺŘ ôŚźœŘ ÛŞŚì O(1) ďć ñŚÞäŘ ßþŘ ěŘ Œþ Âû Ćî ťĺŘ ßłøď
c
°
1389 öŚŞŊ 1
15
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
$
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üÎą ýĆþĄĺøć ťÆČó ďć éÁ§ ø Žďć
Insert-After (L, x, n)
. ÀĂîüõ Žďć L ýĆþĄĺøć ťÆČó ďć n ÂÊĂä ěŘ ÅŢ Řď x ýŘĄţ¡õ ŚŞ ýÂÊĂä
1 if isEmpty(L) or n = null
2
then error element n does not exist
3 r ← next[n]
4 next[n] ← Allocate-Node (x, n, r)
5 prev[r] ← next[n]
6 size[L] ← size[L] + 1
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
16
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Delete-After (L, n)
. ÀĂîüõ éÁ§ L ýĆþĄĺ øć ťÆČó ďć Řď n ýÀãŞ ÂÊĂä
1 if isEmpty(L) or n = null or next[n] = null
2
then error element does not exist
3 r ← next[n]
4 if next[r] 6= null
5
then prev[next[r]] ← n
6 next[n] ← next[r]
7 Free-Node(r)
8 size[L] ← size[L] − 1
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
17
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
first[L]
prev
$
next
L
element
ýĆþĄĺøć üÎą ťÆČó
r
n
x
Insert-After(L, x, n)
n
r
Delete-After(L, n)
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
18
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ťÆČó Œþ ďć ýďŘÂØŮ ÂňŚĂä éÁ§ :ŚûťÆČó ýøď ÂŞ ÂÚþć ŰŚČÜÞä
L
L
x
p
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
x
q
next[q] ← next[next[q]
19
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
PurgeList (L)
. ÀĂîüõ éÁ§ üØþ ÃŻ Řď öŚÆØþ ÂňŚĂä ýĆÞû
1 p ← First (L)
2 while p <> null
3
do q ← p
4
while next[q] <> null
5
do if element[p] = element[next[q]]
6
then Delete-After (L, q)
7
else q ← next[q]
8
p ← next[p]
?ćŘć ôŚźœŘ O(n lg n) ďć Řď ďŚî ßþŘ öŘĄŮüõ ŚþŊ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
20
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ŚûÂðùďŚłŘ ÂČČçŮ ŚŞ ťÆČó Œþ öćÂî öøďŘø
p
p
q
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
r
21
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Recursive-Reverse (L, p)
. .ÀœŘćÂðüõÂŞ Řď ÛňŚ§ ø ÀĂîüõ öøďŘø ÀãŞ ĆŞ p ÂÊĂä ěŘ Řď L ťÆČó
1 if p = null or next[p] = null
2
then return p
3 q ← next[p]
4 r ← Recursive-Reverse (L, q)
5 next[q] ← p
6 next[p] ← null
7 return r
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
22
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üţÈð쌪ÂČè ŰďĄňĆŞ ťÆČó Œþ öćÂî öøďŘø
first[L]
p
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
q
r
23
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
NR-Reverse (L)
1 if Size(L) ≤ 1
2
then return first[L]
3 p ← null
4 q ← First(L)
5 r ← next[q]
6 while r 6= null
7
do next[q] ← p
8
p← q
9
q← r
10
r ← next[r]
11 next[q] ← p
12 return q
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
24
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ğĄêěøę ýĆÜßÆõ
ďć ø 1 ýùďŚÞł ěŘ áøÂł ŚŞ ø ÀœÂČÚŞ ďŘÂì ýŘùÂþŘć ďøć n ŚŮ 1 ýŚûùďŚÞł ŚŞ ÂÔœ n ÂðŘ
ýŘùďŚÞł Ćİ ÂÔœ ßþÂąŊ ,ÀÈØŞ Řď ľćĄą ÂÔœ (ßČõŘ k Śþ) ßČõøć  Âû ćÂðťäŚĺ ťúŻ
?ćďŘć
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
25
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
10
1
2
9
3
8
4
7
6
$
5
.ÂÔœ 10 ŚŞ ğĄêěøę ýĆÜßÆõ
ùÀ œě 5 ø À Ă Ă îü õ ü È îćĄ ą 9 ,1 ,7 ,3 ,10 ,8 ,6 ,4 ,2 ćŘ êŘ ř Č Ů ŮĆ Ş n = 10 ýŘ Ş
.ÀœŚõüõ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
26
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
ěŘ Řď ŠŘĄ Ż öŘĄ Ůü õ ø ť ĺŘ Ć ś ĺŚ ¡ õ Û ŞŚ ì ü őŚ þď ŰďĄ ňĆ Ş J(n) Ć Ü ß Æ õ ß þŘ ŠŘĄ Ż
$
.ćďøŊ ťĺćĆŞ Âþě üţÈð쌪 ýĆÎŞŘď
J(1)
= 1
J(2n)
= 2J(n) − 1, for n ≥ 1,
J(2n + 1) = 2J(n) + 1 for n ≥ 1.
J(n) ÝČûć üœŘďøć šİ ťÔČł ťČŞ Œþ ŘďöŊ ø ÝČÆþĄĂŞ üþøćøć ćÀä ŰďĄňĆŞ Řď n ÂðŘ
.ÀþŊüõ ťĺćĆŞ
.ťĺŘ J(n) = (100101)2 = 73 ŠŘĄŻ ,n = 100 = (110010)2 ýŘÂŞ Ě
f ůõ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
27
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ýŘĆÖܧ ýÀœĄČŢ ťÆČó ŚŞ ğĄêěøę ýĆÜßÆõ Û§
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
28
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Joesephous (n)
. ÀĂîüõ 挟þŘ ùÂð n ŚŞ ýĄÖܧ ýÀœĄČŢ ťÆČó Œþ ŘÀţŞŘ ďć
1 Create(L)
2 first[L] ← q ← Allocate-Node(1, null )
3 p← q
4 for i ← 2 to n
5
do next[p] ← Allocate-Node(i, next[p])
6
p ← next[p]
7 next[p] ← q; size[L] ← n
. ğĄêěøę ýĆÜßÆõ ÀĂîe Û§ùŘď ĎŚ§ ø
8 p ← First(L)
9 while next[p] 6= p
10
do Delete-After(L, p)
11
p ← next[p]
12 Print element[p]
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
29
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üÆþÀœŘ ýŚûÂðùďŚłŘ ŚŞ ŚûťÆČó ýěŚĺùćŚČŢ
?ÝČĂîüõ ýěŚĺùćŚČŢ ĆœĄðĆİ Řď ŚûťÆČó öÂŮÂê öŚŞě Śþ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
30
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
L
prev
next
A
11
$
B
element
C
3
7
D
4
L
11
4
element
C
D
B
prev
7
3
11
next
2
4
5
6
7
3
1
3
8
9
10
11
7
A
.ÀĂţÆû ÅþÀœŘ ŚûÂðùďŚłŘ .prev ø element ,next ýĆþŘďŊ Ćĺ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
31
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
L1
11
L2
5
4
2
13
3
element
b
C
D
prev
5
7
3
next
1
4
5
2
a
6
7
3
B
11
8
$
9
10
11
12
13
7
A
c
2
.ćÂî ýěŚĺùćŚČŢ ĆÑêŚ§ öŚÞû ďć öŘĄŮüõ Řď (L2 ø L1 Ě
f ůõ) ťÆČó Œþ ěŘ ÇČŞ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
32
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
L
19
prev
1
2
3
4
next
5
13 C
6
7
7
4
8
D
9
10
11
12
13
14
19 B
15
4
19
20
21
A 13
element
.ćÂî ùćŚÔţĺŘ ťÆČó Œþ ýěŚĺùćŚČŢ ýŘÂŞ ĆþŘďŊ Œþ ěŘ ÍÖê öŘĄŮüõ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
33
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ćŘěŊ ýŚÌê ťþÂþÀõ
.ÀœÂČðüõ ďŘÂì avail ôŚœĆŞ üţÆČó ďć ćŘěŊ ÂňŚĂä ýĆÞû •
.ÀœćŘěŊ ŚûĆþŘďŊ ÂňŚĂä ýĆÞû ŘÀţŞŘ ďć •
ďć ùÀł éÁ§ avail ěŘ ćŘěŊ ťÆČó ÂÊĂä ßČóøŘ ,Žďć ýŘÂŞ (Allocate-Object ÛÞä) •
ćÂČðüõ ďŘÂì ďŚČţąŘ
.楳üõ ćŘěŊ avail ťÆČó ýŘÀţŞŘ ďć Žďć ŚŞ ÂÊĂä (Free-Object ÛÞä) •
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
34
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üÆþÀœŘ ÂðùďŚłŘ ŚŞ ťÆČó Œþ ďć éÁ§ ø Žďć ěŘ üóŚůõ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
35
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
L 11
avail 1
1
next
2
3
2 6 4
4
5
6
7
8
9
10
11
12
13
12
13
10 5 3 9 12 8 7 13
element
C D
B
prev
7 3
11
A
üÜňŘ ťÆČó (ÓóŘ)
L 11
avail 2
1
2
3
next 11 6 4
element
prev
E
4
5
c
°
1389 öŚŞŊ 1
7
8
9
10
11
10 5 3 9 12 8 7 13
C D
B
A
7 3
11
1
(ÓóŘ) ťÆČó ñøŘ ÂÊĂä öŘĄĂäĆŞ
&
üĺÀì ÀÞ¡õ
6
36
E Žďć ěŘ ÅŢ (Š)
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
L 11
avail 2
1
2
3
next 11 6 4
element
E
prev
4
5
6
7
8
9
10
11
12
13
12
13
10 5 3 9 12 8 7 13
C D
B
A
7 3
11
1
(ÓóŘ) ťÆČó ñøŘ ÂÊĂä öŘĄĂäĆŞ
E Žďć ěŘ ÅŢ (Š)
L 11
avail 7
1
2
3
next 11 6 4
element
prev
E
c
°
1389 öŚŞŊ 1
5
6
7
8
9
10
11
10 5 2 9 12 8 3 13
C D
A
11 3
1
(Š) ťÆČó ďć
&
üĺÀì ÀÞ¡õ
4
B ÂÊĂä éÁ§ ěŘ ÅŢ (Ť)
37
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ýěŚĺùćŚČŢ
Initialize ()
1 null ← 0
2 avail ← 1
3 for i ← 1 to M − 1
4
do next[i] ← i + 1
5 next[M ] ← null
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
38
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
(ĆõŘćŘ) ýěŚĺùćŚČŢ
Allocate-Object ()
1 if avail = null
2
then error out of space
3 x ← avail
4 avail ← next[avail]
5 return x
Free-Object (x)
1 next[x] ← avail
2 avail ← x
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
39
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
(Garbage Collection) üŞøďĆóŚŞě
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
40
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ŚûĆţÈŢ
S ýĆţÈŢ ýĎŚŞ ďć x ÂÊĂä Œþ Žďć :Push(S, x) •
žČû :üŻøÂą ,(üČł) ÂÊĂä :ýćøďø
b
ĆţÈŢ ýĎŚŞ ÂÊĂä öÀœŘćÂð쌪 ø éÁ§ :Pop(S) •
ÀłŚŞ üóŚą ĆţÈŢ ÂðŘ :ŚÎą ,(üČł) ÂÊĂä :üŻøÂą ,žČû :ýćøďø
b
ĆţÈŢ ďć 楯Ąõ ÂňŚĂä ćŘÀãŮ :Size(S) •
ijČ¡ň ćÀä Œþ :üŻøÂą ,žČû :ýćøďø
ťĺŘ üóŚą ĆţÈŢ ŚþŊ Ćî ÀĂîüõ É£Èõ :isEmpty(S) •
ťĺďćŚœ Śþ ťĺďć :üŻøÂą ,žČû :ýćøďø
ÀœŘćÂðüõÂŞ Řď ĆţÈŢ ýĎŚŞ ÂÊĂä :Top(S) •
&
üĺÀì ÀÞ¡õ
ÀłŚŞ üóŚą ĆţÈŢ ÂðŘ :ŚÎą ,(üČł) ÂÊĂä :üŻøÂą ,žČû :ýćøďø
b
c
°
1389 öŚŞŊ 1
41
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
8, 7, 6, 5, 4, 3, 2, 1
$
8, 1, 2, 7, 3, 6, 4, 5
.ŚûďŚÎì ýĆţÈŢ
?ďĄÏĆİ .ťĺŘ ÀČóĄŮ ÛŞŚì h8, 1, 2, 7, 3, 6, 4, 5i
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
42
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
8, 7, 6, 5, 4, 3, 2, 1
$
8, 1, 2, 7, 3, 6, 4, 5
.ŚûďŚÎì ýĆţÈŢ
?ďĄÏĆİ .ťĺŘ ÀČóĄŮ ÛŞŚì h8, 1, 2, 7, 3, 6, 4, 5i
Push, Push, Push, Push, Push, Pop, Pop, Push, Pop, Pop, Push, Pop, Pop, Pop, Push, Pop
?ďĄÏĆİ h1, 8, 3, 6, 2, 7, 4, 5i
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
43
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ĆÜßÆõ ÀĂİ
.ÀČĂî ŰŚśŹŘ ŘďöŊ ?ťÆČİ ÀłŚŞ ÀČóĄŮ ÛŞŚì Ćî ĆóŚśœć Œþ ýŘÂŞ üêŚî ø ôěĎ ŕÂł (1
.Àûć ÉČ£ÈŮ Řď ýŘĆóŚśœć ö楪 ÀČóĄŮ ÛŞŚì ŚŮ ÀČûć ĆŐŘďŘ O(n) ěŘ üÞţþďĄÚóŘ (2
üĂãþ ;ćďŘć 楯ø üŻøÂą ø ýćøďø ýŚûďŚÎì ßČŞ Ýû ÝČÖţÆõ Ûþď Œþ ÀČĂî ŋÂê (3
ÛÖţĂõ üŻøÂą Ûþď ĆŞ fŚÞČÖţÆõ Śþ ø ćøď ĆţÈŢ ÛąŘć ĆŞ Śþ ÀœŘĄŮüõ ýćøďø ďŚÎì ßČóøŘ
Œ þ ÉČ £ÈŮ Ýţ þďĄ ÚóŘ ŰďĄ ň ßþŘ ďć .ýćøďø ĆŞ ü ŻøÂą ěŘ Å ØäÂŞ Śþ ø ,ćĄ ł
.ÀČûć ĆŐŘďŘ Řď ÀČóĄŮ ÛŞŚì ýĆóŚśœć
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
44
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
&
üĺÀì ÀÞ¡õ
.ÀČĂî Û§ ÛØł ÕŞŚÎõ ýŘĆţÈŢ øć ÝţÆČĺ ýŘÂŞ Řď üÜňŘ ýĆÜßÆõ (4
c
°
1389 öŚŞŊ 1
45
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
$
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ĆþŘďŊ ŚŞ ĆţÈŢ ýěŚĺùćŚČŢ
ďć 楯Ąõ ÂÊĂä ßþÂŮĎŚŞ ÅþÀœŘ Ćî top[S] ýĆÔóĄõ ø max ÂůîŘÀ§ ýùěŘÀœŘ ŚŞ S ýĆþŘďŊ
b
.ťĺŘ S
public class ArrayStack implements Stack {
public static final int CAPACITY=1000;
private int capacity;
private object S[];
private int top = -1;
public ArrayStack(){
this(CAPACITY);
}
public ArrayStack(int cap){
capacity = cap;
S = new object[capacity];
}
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
46
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
Stack
1 23
$
top[S]
max
S
.ĆþŘďŊ ŚŞ ĆţÈŢ ýěŚĺùćŚČŢ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
47
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
Size (S)
1 return top[S]
$
. assuming that initially top[S] = 0
isEmpty (S)
1 return Size(S) = 0
Top (S)
1 if isEmpty(S)
2
then error (”stack is empty”)
3 return S[top[S]]
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
48
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Push (S, x)
1 if Size(S) = max
2
then error (”stack is full”)
3 top[S] ← top[S] + 1
4 S[top[S]] ← x
Pop (S)
1 if isEmpty()
2
then error (”stack is empty”)
3 e ← S[top[S]]
4 top[S] ← top[S] − 1
5 return e
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
49
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
S
1 23
top1
top2
$
N
.ĆþŘďŊ ŚŞ ĆţÈŢ ÀĂİ ýěŚĺùćŚČŢ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
50
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ÛČÜ¡Ů
.ÀœĄłüõ ôŚźœŘ O(1) ďć ñŚÞäŘ ýĆÞû
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
51
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ýÀœĄČŢ ťÆČó ŚŞ ĆţÈŢ ýěŚĺùćŚČŢ
Size (S)
1 return size[S]
isEmpty (S)
1 return (size[S] = 0)
Top (S)
1 if isEmpty(S)
2
then error (”stack is empty”)
3 return top[S]
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
52
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Push (S, x)
1 top[S] ← Allocate-Node (x, top[S])
2 size[S] ← size[S] + 1
Pop (S)
1 if isEmpty(S)
2
then error (”stack is empty”)
3 n ← top[S]
4 temp ← element[n]
5 top[S] ← next[n]
6 size[S] ← size[S] − 1
7 Free-Object(n)
8 return temp
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
53
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Óň
ťÆČó ýŘÀţŞŘ ďć éÁ§ ø ŚúţœŘ ďć Žďć
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
54
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Óň ýŚúţœŘ ďć ÂÊĂä Œþ Žďć :Enqueue(Q, x) •
žČû :üŻøÂą ,(üČł) ÂÊĂä :ýćøďø
b
Óň ýŘÀţŞŘ ěŘ ÂÊĂä éÁ§ :Dequeue(Q) •
ÀłŚŞ üóŚą ÂðŘ :ŚÎą ,(üČł) ÂÊĂä :üŻøÂą ,žČû :ýćøďø
b
Óň ďć 楯Ąõ ÂňŚĂä ćŘÀãŮ :Size(Q) •
ijČ¡ň ćÀä Œþ :üŻøÂą ,žČû :ýćøďø
ťĺŘ üóŚą Óň ŚþŊ Ćî ÀĂîüõ É£Èõ :isEmpty(Q) •
ťĺďćŚœ Śþ ťĺďć :üŻøÂą ,žČû :ýćøďø
ÀœŘćÂðüõÂŞ Řď Óň ýŘÀţŞŘ ÂÊĂä :Front-Element(Q) •
ÀłŚŞ üóŚą ÂðŘ :ŚÎą ,ÂÊĂä :üŻøÂą ,žČû :ýćøďø
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
55
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ďŘøć ýĆþŘďŊ ŚŞ ýěŚĺùćŚČŢ
rear
1
0
N −1
front
rear
empty queue
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
1
0
N −1
1
0
N −1
front
rear
front
non-empty queue
56
full queue
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
Q Óň Œþ
$
max − 1 ŚŮ 0 ýŚûÅþÀœŘ ø max ýùěŘÀœŘ ŚŞ ĆþŘďŊ Œþ •
.ÀœĄłüõ ùÂČąč ćÂðťäŚĺ ťúŻ ďć ø ďŘøć ŰďĄňĆŞ ÂňŚĂä •
.ťĺŘ Q[i] ý
c ÀãŞ ÂÊĂä Q[(i + 1) mod max] •
Óň üþŘÀţŞŘ ÂÊĂä ÅþÀœŘ f ront[Q] ýĆÔóĄõ •
.Óň ÂÊĂä ßþÂąŊ ýÀãŞ ÂÊĂä ÅþÀœŘ rear[Q] •
.ťĺŘ max − 1 ÂňŚĂä ćŘÀãŮ ÂůîŘÀ§ ßþŘÂŞŚĂŞ •
.ÝČûć ÃČÞŮ Ýû ěŘ ÝČœŘĄţŞ Řď "üóŚą Ě
f õŚî’ ø "ÂŢ Ě
f õŚî’ ťóŚ§ øć ÝČûŘĄąüõ •
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
57
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Óň ÓÜţ£õ ýŚûťóŚ§
f ront[Q] = rear[Q] = 0 áøÂł ďć •
.(max − f ront[Q] + rear[Q]) mod max ÂŞŘÂŞ ĆÈČÞû ÂňŚĂä ćŘÀãŮ •
.f ront[Q] = rear[Q] ÝþďŘć ÀłŚŞ üóŚą Ě
f õŚî Óň ÂðŘ •
.(max − f ront[Q] + rear[Q]) mod max = max − 1 ÝþďŘć ÀłŚŞ ÂŢ Ě
f õŚî ÂðŘ •
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
58
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Size (Q)
1 return (max − f ront[Q] + rear[Q]) mod max
isEmpty (Q)
1 return (f ront[Q] = rear[Q])
Front-Element (Q)
1 if isEmpty(Q)
2
then error ”Queue is empty”
3 return Q[f ront[Q]]
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
59
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Enqueue (Q, x)
1 if Size(Q) = max − 1
2
then error ”Queue is full”
3 Q[rear[Q]] ← x
4 rear[Q] ← (rear[Q] + 1) mod max
Dequeue (Q)
1 if isEmpty()
2
then error ”Queue is empty”
3 temp ← Q[f ront[Q]]
4 f ront[Q] ← (f ront[Q] + 1) mod max
5 return temp
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
60
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
&
üĺÀì ÀÞ¡õ
.ÀĂţÆû O(1) ěŘ ĆÞû ñŚÞäŘ ßþŘ
c
°
1389 öŚŞŊ 1
61
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
$
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ýÀœĄČŢ ťÆČó ŚŞ Óň ýěŚĺùćŚČŢ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
62
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
front
rear
front
rear
front
rear
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
63
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
isEmpty (Q)
1 return size[Q] = 0
Enqueue (Q, x)
1 next[rear[Q]] ← Allocate-Node (x, null )
2 rear[Q] ← next[rear[Q]]
3 size[Q] ← size[Q] + 1
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
64
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Dequeue (Q)
1 if isEmpty(Q)
2
then error ’queue is empty’
3 n ← f ront[Q]
4 x ← element[n]
5 f ront[Q] ← next[f ront[Q]]
6 Free-Node(n)
7 size[Q] ← size[Q] − 1
8 return x
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
65
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ŚûťÆČó ěŘ üþŚûćÂŞďŚî
ğ索 ďŘ쌪 üŞŚþěďŘ ýĆÜßÆõ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
66
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
s0 = 1
s6 = 6
s1 = 1
s5 = 4
s3 = 2
s2 = 1
p0
p1
$
p2
s4 = 1
p3
p4
p5
p6
.(si) ěøď Âû ďć öŊ ý"ùďøć’ ø (pi) ğ索 ďŘ쌪 ďć Ýúĺ Œþ ĆœŘěøď ťÞČì
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
67
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
楳üõ ĆČúŮ ÓÜţ£õ ýŚûěøď ďć ťîÂł Œþ ôŚúĺ ťÞČì
$
:ÝČĂî ŘÀČŢ Řď "ôŚúĺ öŊ ýùďøć’ ěøď Âû ďć ÝČûŘĄąüõ
ýŚ ûěøď ćŘÀ ã Ů Ś Ş ť ĺŘ Â ŞŘÂ Ş i ěøď ďć ùďøć ,À łŚ Ş pi  ŞŘÂ Ş i ěøď ďć ôŚ ú ĺ ť Þ Č ì  ðŘ
.ÀłŚŞ pi ýøŚÆõ Śþ ÂŮÝî ôŚúĺ ťÞČì Ćî (i ÛõŚł) i ěŘ Ûśì ĆÜňŚêĚŞ
P üþŚŮ n ýĆþŘďŊ :ýćøďø
.ÀłŚŞ i ěøď ďć "ôŚúĺ ýùďøć’ S[i] Ćî S üþŚŮ n ýĆþŘďŊ :üŻøÂą
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
68
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ÀĂî ÝţþďĄÚóŘ
ComputeSpans (P )
. Input: n-element array P
. Output: n-element array S
1 for i ← 0 to n − 1
2
do k ← 0
3
done ← false
4
repeat if P [i − k] ≤ P [i]
5
then k ← k + 1
6
else done ← true
7
until k = i or done
8
S[i] ← k + 1
9 return S
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
69
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ÛČÜ¡Ů
O(n2)
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
70
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üÎą ÝţþďĄÚóŘ
ComputeSpans2 (P )
. we use a stack D
1 for i ← 0 to n − 1
2
do done ← false
3
while ( not isEmpty(D) or done)
4
do if P [i] ≥ P [Top(D)]
5
then Pop(D)
6
else done ← true
7
if isEmpty(D)
8
then h ← −1
9
else h ← Top(D)
10
S[i] ← i − h
11
Push(D, i)
12 return S
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
71
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ÛČÜ¡Ů
.楳üõ éÁ§ ĆţÈŢ ěŘ ďŚŞŒþ ÂůîŘÀ§ ø Žďć ĆţÈŢ ďć Œþ fŚÖČìć ÂÊĂä Âû öĄİ O(n)
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
72
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ťÆČó ŚŞ üõŚèćŘ ýěŚĺřŮÂõ
MergeSort (L)
. ÀĂîüõ řŮÂõ ŚûÂðùďŚłŘ ÂČČçŮ ŚŞ ÍÖê Řď ýÀœĄČŢ ťÆČó Œþ
1 if Size(L) > 1
2
then Create(L1); Create(L2)
3
first[L1], first[L2] ← Split(first[L])
4
MergeSort (L1)
5
MergeSort (L2)
6
first[L]← Merge(first[L1], first[L2])
7
return L
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
73
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
`
ùÀł ôŚèćŘ ťÆČó ĆŞ
`1
ÀœĄłüõ ôŚèćŘ Ýû ďć üţÈð쌪 üœŘĄąŘÂê ŚŞ
`2
.` ñøŘ ÂÊĂä ŚŞ řŮÂõ ťÆČó Œþ ÀČóĄŮ ø `2 ø `1 ñøŘ ÂňŚĂä ŚŞ řŮÂõ ťÆČó øć ôŚèćŘ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
74
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Merge (`1, `2)
1 if `1 = null
2
then return `2
3 if `2 = null
4
then return `1
5 if key[`1] ≤ key[`2]
6
then next[`1] ← Merge(next[`1], `2)
7
return `1
8
else next[`2] ← Merge(`1, next[`2])
9
return `2
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
75
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
`
`1
a1
a2
a3
a1
a2
a3
$
`2
n
.ýĄÌä b 2
c ø d 2n e ťÆČó øć ĆŞ ýĄÌä n ťÆČó Œþ ÝČÆÖŮ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
76
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Split (`)
1 if ` = null
2
then return null , null
3 if next[`] = null
4
then return null , `
5 `1 ← `
6 `2 ← next[`]
7 next[`], next[`2] ← Split(next[`2])
8 return `1, `2
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
77
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üÜî ýŚûťÆČó
üÜî ťóŚ§ ďć ýŘĆÜÞŻÀĂİ Œþ •
Ćî ťĺŘ cxex y ey z ez . . . áĄœ ěŘ ýŚûŰä âÞŻ •
ø z ,y ,x ýŚ ûÂ Č ç ţ õ öŘĄ Ů ř þŘ ő ř Č Ů ŮĆ Ş. . . ,ez ,ey ,ex ø ŰďŚ ś ä ß þŘ ř þ ő c •
Ě
f ůõ .ÀĂţÆû. . .
P = x10y 3z 2 + 2x8y 3z 2 + 3x8y 2z 2 + x4y 4z + 6x3y 4z + 6x3y 4z + 2yz (1)
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
78
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
:Âþě ñŚÞäŘ ŚŞ řĺŚĂõ ďŚţąŚĺùćŘć ü§ŘÂÏ éÀû
$
ŰďŚśä ŤŚİ -öŊ ÕÞä ßþÂŮÇČŞ ßČČãŮ -ŰďŚśä Œþ öćÂî üşî -Űä øć ÕþÂÔŮ Śþ âÞŻ -ŚûÂČçţõ ěŘ üØþ řÆ§ÂŞ Űä ěŘ ýÂČðÕţÈõ --
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
79
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
Âþě ÂňŚĂä ŚŞ ťÆČó Œþ :ñøŘ ľøď
$
coef expx expy
expz
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
link
80
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üţÈð쌪 ďŚţąŚĺ ŚŞ üÜî ťÆČó
,z, y, x, nz , ny , nx řÆ§ÂŞ ýŘĆÜÞŻ ÀĂİ Œþ P (z, y, x, nz , ny , nx ) ÂðŘ
ø x ø y ,z řČŮÂŮĆŞ ŚûÂČçţõ •
,ÀĂłŚŞ nx ø ny ,nz ÂŞŘÂŞ řČŮÂŮĆŞ ŚûöŊ ýĆŻďć •
:ÝČĂîüõ ÓþÂãŮ Âþě ŰďĄňĆŞ ŘďöŊ
P (z, y, x, nz , ny , nx) =
cnz (Pnz (y, x, ny , nx)z nz + cnz −1(Pnz −1(y, x, ny , nx)z nz −1 +
. . . + c0(P0(y, x, ny , nx))
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
81
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ñŚůõ
(((x10 + 2x8)y 3 + 3x8y 2)z 2 + ((x4 + 6x3)y 4 + 2y)z)
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
82
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
var
P
z -
link
dlink
nz − 1
link
coef
link
nz
exp
$
1
exp
exp
y -
y Pnz (y, x, ny , nx )
y -
Pnz −1 (y, x, ny , nx )
P0 (y, x, ny , nx )
P (z, y, x, nz , ny , nx ) = Pnz (y, x, ny , nx )z nz + Pnz −1 (y, x, ny , nx )z nz −1 + · · · + P0 (y, x, ny , nx )
node−type = poly
var
P
z exp
link
dlink
link
1
2
exp
y -
x &
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
2
y -
x -
3 8
3
coef
link
1 10
2 8
exp
83
4
x -
1
x -
2 1
1 4
6 3
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
&
üĺÀì ÀÞ¡õ
$
.((x10 + 2x8)y 3 + 3x8 y 2)z 2 + ((x4 + 6x3 )y 4 + 2y)z
c
°
1389 öŚŞŊ 1
84
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ñŚÞäŘ
Print-PList (P )
. ťĺŘ ùÀł ĆţąŚĺ ťĺďć ťÆČó Ćî ÝČĂîüõ ŋÂê
1 p← P
2 X = var[p] . P ýŘĆÜÞŻÀĂİ üÜňŘ ÂČçţõ
3 while p 6= null
4
do if Node-Type(p) = poly
5
then Print ’(’
6
Print-PList (dlink[p])
7
Print ’) ^ exp[p]’
8
else
9
. ŚûĆœĄðùćŘć üţĺďć ŋÂê ŚŞ
10
Print ’+coef [p] X^exp[p]’
11
p ← link[p]
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
85
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Depth-PList (P )
. ťĺŘ ùÀł ĆţąŚĺ ťĺďć ťÆČó Ćî ÝČĂîüõ ŋÂê
1 p← P
2 depth ← 0
3 while p 6= null
4
do if Node-Type(p) = poly
5
then dp ← Depth-Plist (dlink[p]) + 1
6
depth ← max{depth, dp}
7
p ← link[p]
8 return depth
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
86
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ÂðùďŚłŘ ø (thread) ¿œ
node−type = poly
P
dlink
z
link
2
1
exp
3
y
2
y
x
4
1
x
3 8
2 1
coef
x
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
1 10
2 8
87
x
1 4
6 3
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Depth-Threaded-PList (P )
1 p← P
2 depth ← 0
3 maxdepth ← 0
4 while true
5
do if Node-Type[p] = poly
6
then depth ← depth + 1
7
p ← dlink[p]
8
else while link[p] is a thread
9
do p ← link[p]
10
maxdepth = max{maxdepth, depth}
11
if exp[p] 6= null
12
then p ← exp[p]
13
depth ← depth − 1
14
else return maxdepth
15
if link[p] is pointer
16
then p ← link[p]
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
88
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
üţÈð쌪ÂČè ĆŞ üţÈð쌪 ýŚûÝţþďĄÚóŘ ÛþÀśŮ
Procedure A
begin
Procedure B
begin
Procedure C
begin
call C
call B
return
return
return
ťÈð쌪 ø üœŘĄąŘÂê ďć ĆõŚœÂŞ ñÂţĂî ñŚÖţœŘ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
89
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
Û§ŘÂõ
$
üœŘĄąŘÂê ÛÞä (1
üœŘĄąŘÂê Œþ ěŘ ťÈð쌪 (2
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
90
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
(Call) üœŘĄąŘÂê Âû
ø (ÂþÁŢğÂţ ĺć ýŚûÂČ ç ţ õ ĆČ Üî ü Üî ť óŚ§ ďć) ü Ü¡õ ýŚûÂČ ç ţ õ ýĆČ Üî ýùÂČ ąč (1
.(Push) ÝţÆČĺ ýĆţÈŢ ďć öŚÈþŚûďŘÀÖõ
.(Push) 楳 üõ ÛÖţĂõ ĆţÈŢ ĆŞ ťÈð쌪 ğďćŊ (2
ťĺŘ ßØÞõ ŚûÂţõŘďŚŢ .ćÂČðüõ ŰďĄň (Parameter Passing) ŚûÂţõŘďŚŢ ñŚÖţœŘ ÛÞä (3
.ÀĂłŚŞ (Variable) üĺďćŊ Śþ (Val) üłěďŘ áĄœ ěŘ
ÀþÀŻ ýĆþøď ýŘÀţŞŘ ĆŞ (Program Counter ,ĆõŚœÂŞ ýùÀœďŚÞł ŰŚśŹ) ĆõŚœÂŞ ñÂţĂî (4
.ÀĂîüõ ùŘ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
91
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
(Return) ťÈð쌪 ÛÞä
ëĄê ŰŚČÜÞä ÅØä
ďŘ ì öŚ łćĄ ą ďć ø Ć ţ łŘćÂ Ş Ć ţ È Ţ ýĎŚ Ş ćďĄ îď ěŘ Řď ü Ü ¡ õ ýŚ ûÂ Č ç ţ õ ýŚ ûďŘÀ Ö õ (1
.ÝČûćüõ
.ÝþďøŊüõ ťĺć ĆŞ ĆţÈŢ ýĎŚŞ ěŘ Řď ťÈð쌪 ğďćŊ (2
.(Pop) ÝþďŘćüõÂŞ ĆţÈŢ ěŘ Řď ćďĄîď ßþÂąŊ (3
.ÝČûćüõ ĆõŘćŘ (2 ÀĂŞ) ťÈð쌪 ğďćŊ ěŘ Řď ĆõŚœÂŞ ñÂţĂî (4
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
92
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ñŚůõ
Honoi (n, f, t, h)
. moving n coins from leg f to leg t with the help of leg h
1 if n = 1
2
then Move the coin from leg f to leg t
3
else Honoi(n − 1, f, h, t)
4
A: Move the coin from leg f to leg t
5
Honoi(n − 1, h, t, f )
6
B:
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
93
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
Final return
Hanoi(3,1,3,2)
1→3
3,1,3,2,A
Hanoi(2,1,2,3)
(a)
3,1,3,2,B
Hanoi(2,2,3,1)
1→2
2,1,2,3,A (b)
3,1,3,2,A
Hanoi(1,1,3,2)
1→3
(d)
2→3
2,1,2,3,B
2,2,3,1,A
(c)
(3)
3,1,3,2,A
3,1,3,2,B
Hanoi(1,3,2,1)
Hanoi(1,2,1,3)
3→2
2→1
2,2,3,1,B
(f)
3,1,3,2,B
Hanoi(1,1,3,2)
1→3
.Honoi(3,1,3,2) ďć ÝţÆČĺ ýĆţÈŢ ÂþćŚÖõ ø üţÈð쌪 ýŚûüœŘĄąŘÂê ÓÜţ£õ Û§ŘÂõ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
94
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
NonRecursive-Honoi (n, f, t)
1 Create-Stack(S) . ťĺŘ üÜ¡õ ýŚûÂČçţõ ýĆÞû ÂþćŚÖõ ø ťÈð쌪 ğďćŊ ÛõŚł S ýĆţÈŢ
2 h ← the other peg
3 Rec-Call: . (üţÈð쌪 üœŘĄąŘÂê Œþ ěŚèŊ) if n = 1
4
then Print f −→ t . ßî ÛÖţĂõ t ýĆÜČõ ĆŞ f ýĆÜČõ ěŘ Řď üþĎŚŞ ýĆØĺ
5
goto Return-Label
6
else Push (S, StackRec(n, f, t, h,’A’))
7
n, f, t, h ← n − 1, f, h, t . ö楪 üłěďŘ ŋÂê ŚŞ ŚûÂţõŘďŚŢ ñŚÖţœŘ
8
goto Rec-Call
9 Return-Label: if not isEmpty(S)
10
then . 楳üõ ýěŚĺĆČśł ťÈð쌪 ÛÞä ďĄţĺć ßþŘ ěŘ
11
n, f, t, h, return-addrs ← Pop(S)
12
switch
13
case return-addrs = ’A’
14
do Print f −→ t; Push(S, SRec(n, f, t, h, ‘B‘))
15
n, f, t, h ← n − 1, h, t, f . ŚûÂţõŘďŚŢ ñŚÖţœŘ
16
goto Rec-Call
17
case return-addrs = ’B’
18
do goto Return-Label
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
95
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
(Tail Recursion) ťÈð쌪 ßþÂąŊ éÁ§
ýŚ ûďŘÀ Ö õ ěŘ Ć î ýďĄ ţ ĺć ü Î þŘ ł ž Č û ďć öŊ ěŘ À ã Ş Ć î ü ţ È ðěŚ Ş ü œŘĄ ąŘ ê ß þ ąŊ
.ÝČþĄÚČõ ťÈð쌪 ßþÂąŊ Řď ćĄÈœ ŘÂŻŘ ,ÀĂî ùćŚÔţĺŘ ŚûÂČçţõ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
96
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
.ćÂî éÁ§ ĆţÈŢ ěŘ ùćŚÔţĺŘ öøÀŞ öŘĄŮüõ Řď ťÈð쌪 ßþŘ
RecursiveProc (. . . )
...
...
A: RecursiveProc(. . . )
x:
$
. this is the last line
ýŘÂŻŘø ÀĂîüõ ÂČČçŮ öŚÈþŚûďŘÀÖõ üÜ¡õ ýŚûÂČçţõ (A) üœŘĄąŘÂê ßþŘ ěŘ ťÈð쌪 ďć
.ťĺŘ ťÈð쌪 Œþ ŚúĂŮ (x) üóø .楳üõ ñŚśœć (x) ýĆÎÖœ ěŘ ĆõŚœÂŞ
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
97
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
ñŚůõ
Honoi (n, f, t, h)
. moving n coins from leg f to leg t with the help of leg h
1 if n = 1
2
then Move the coin from leg f to leg t
3
else Honoi(n − 1, f, h, t)
4
A: Move the coin from leg f to leg t
5
Honoi(n − 1, f, h, t)
6
B:
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
98
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
öŘĄąŘÂê ßþÂąŊ éÁ§
Tower-of-Honoi2 (n, f, t, h)
. eliminating the last recursion
1 if n = 1
2
then Move the coin from leg f to leg t
3
else Tower-of-Honoi(n − 1, f, h, t)
4
Move the coin from leg f to leg t
5
n, f, h ← n − 1, h, f
. parameter passing
6
goto 1
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
99
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%
ŚûÝţþďĄÚóŘ üœŚśõ ø ŚûďŚţąŚĺùćŘć
'
$
NonRecursive-Honoi2 (n, f, t)
1 h ← the other peg
2 . make recursive call
3 if n = 1
4
then
5
Move the top coin from leg f to leg t
6
goto 10
7
else Push(S, StackRec(n, f, t, h)
8
n, f, t, h ← n − 1, f, h, t
. parameter passing
9
goto 3
10 . end recursive call
11 if not isEmpty(S)
12
then n, f, t, h ← Pop(S)
13
Move the top coin from leg f to leg t
14
n, f, t, h ← n − 1, h, t, f
. parameter passing
15
goto 3
&
üĺÀì ÀÞ¡õ
c
°
1389 öŚŞŊ 1
100
ÂŮĄČşõŚî üĺÀĂúõ ýùÀØÈœŘć
%