Another Way to Implement a Stack

Difference between version 0 and 0 - Previous - Next
[EMJ] But why bother? Because I wanted a queue and ended up going with the [NEM] version
from [Implementing FIFO queues]. Then when I wanted a stack to use in the same program,
I thought it would be nice if it had the same "feel" as the queue. So I took the internals
of SimpleStack2 from [Performance of Various Stack Implementations] and wrapped them in a
'''dict''' just like the queue.

So here it is:

======
namespace eval stack {
    namespace export create empty push pop peek size tolist
    namespace ensemble create

    proc create args {
        dict create stk $args
    }

    proc push {stackVar args} {
        upvar 1 $stackVar stack
        dict lappend stack stk {*}$args
    }

    proc pop stackVar {
        upvar 1 $stackVar stack
        set stk [dict get $stack stk]
        dict set stack stk [list]
        set ret [lindex $stk end]
        dict set stack stk [lreplace $stk [set stk end] end]
        return $ret
    }

    proc peek stack {
        set stk [dict get $stack stk]
        return [lindex $stk end]
    }

    proc size stack {
        llength [dict get $stack stk]
    }

    proc empty stack {
        llength [dict get $stack stk]
    }

    proc tolist stack {
        dict get $stack stk
    }
}
======

<<categories>> Data Structure