32 lines
588 B
Tcl
32 lines
588 B
Tcl
proc push {stackvar value} {
|
|
upvar 1 $stackvar stack
|
|
lappend stack $value
|
|
}
|
|
proc pop {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
set value [lindex $stack 0]
|
|
set stack [lrange $stack 1 end]
|
|
return $value
|
|
}
|
|
proc size {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
llength $stack
|
|
}
|
|
proc empty {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
expr {[size stack] == 0}
|
|
}
|
|
proc peek {stackvar} {
|
|
upvar 1 $stackvar stack
|
|
lindex $stack 0
|
|
}
|
|
|
|
set Q [list]
|
|
empty Q ;# ==> 1 (true)
|
|
push Q foo
|
|
empty Q ;# ==> 0 (false)
|
|
push Q bar
|
|
peek Q ;# ==> foo
|
|
pop Q ;# ==> foo
|
|
peek Q ;# ==> bar
|