ラボ
スタック †
リスト構造の1種で値の出し入れをリストの先頭のみで行うデータ構造。
スタックでの先頭とは配列の添え字の大きい方を指し、添え字0は末尾にあたる。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
-
|
!
-
|
|
|
!
-
|
!
-
|
|
|
!
-
|
!
-
|
!
|
#module "stack"
#deffunc sck_ini val
mref rslt,64
mref stack,48 mref pval,1024 size=pval.2
ptr=0
rslt=size
return
#deffunc sck_pop val
mref rslt,64
mref n,16
if ptr=0{
rslt=1
}
else{
ptr--
n=stack.ptr
rslt=0
}
return
#deffunc sck_push int
mref rslt,64
mref n,0
if ptr=size{
rslt=1
}
else{
stack.ptr=n
ptr++
rslt=0
}
return
#global
randomize
dim ary,5 sck_ini ary
mes "スタックサイズ ==> "+stat+"\n"
repeat
rnd n,100
sck_push n
if stat!0{
mes "スタックがいっぱいです.\n" : break
}
mes "スタックに入れた値 ==> "+n
loop
repeat
sck_pop n
if stat!0{
mes "スタックが空です.\n" : break
}
mes "スタックから出した値 ==> "+n
loop
stop
|
モジュール変数を使えば数値や文字列をごっちゃにして管理可能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
-
|
|
!
|
#module stack_element value
#modinit var p1
value = p1
return
#modfunc get var p1
p1 = value
return
#global
#module stack_maneger
#deffunc _push
newmod stack_elements, stack_element, v
index++
return 0
#deffunc pop var p1
if ( index == 0 ) {
logmes "スタックが空です"
return -1 }
index--
get stack_elements( index ), p1
delmod stack_elements( index )
return 0
#global
#define push( %1 ) v@stack_maneger = %1 : _push
|
以下サンプル。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
| #include "stack4hsp3.hsp"
vartype_name = "", "", "文字列型", "実数型", "整数型"
repeat 10
i = rnd( 10 )
var_type = rnd( 3 ) + 2
switch var_type
case 4
push i
swbreak
case 3
i = double( i )
push i
swbreak
case 2
push str( i )
swbreak
swend
mes vartype_name( var_type ) + "の" + i + "をpushしました。"
loop
mes "-"
repeat
pop a
if stat < 0 : break
mes vartype_name( vartype( a ) ) + "の" + a + "をpopしました。"
loop
stop
|
- やっぱりデータ構造の基本だから・・・。
モジュールとして実装してみました。使用する人によっていろいろな仕様に出来そうです。 -- kz3
- データ構造の説明に絵もあると分かりやすいんだろうけど、普通のペイントソフトだと画像が荒くなる・・・;;
GENKIさんが座標とピクセルに貼ったような滑らかな画像が・・・ -- kz3
- あれwindows付属のペイントですよ。画像が粗くなるのはjpegかpngの違いでは…。 -- GENKI?
- ええぇ!?ちょっとまってください^^; -- kz3
- イメージ図作成。でも「スタック」で検索すればどこでも出てくるし、容量詰めちゃってあれかなぁ・・・。反応よければ他のも追加していきますが^^; -- kz3