Stack-0.3.2: Stack data structure

Safe HaskellSafe
LanguageHaskell2010

Data.Stack

Description

Stack data structure and associated operations

A stack is a basic data structure that can be logically thought as linear structure represented by a real physical stack or pile, a structure where insertion and deletion of items takes place at one end called top of the stack.

In other words, a Stack is an abstract data type that serves as a collection of elements, with two principal operations: stackPush, which adds an element to the collection, and stackPop, which removes the most recently added element that was not yet removed.

See also https://en.wikipedia.org/wiki/Stack_(abstract_data_type)

Synopsis

Documentation

data Stack a Source #

Abstract Stack data type

Instances

Read a => Read (Stack a) Source # 
Show a => Show (Stack a) Source # 

Methods

showsPrec :: Int -> Stack a -> ShowS #

show :: Stack a -> String #

showList :: [Stack a] -> ShowS #

stackNew :: Stack a Source #

O(1). Create new empty Stack

stackPush :: Stack a -> a -> Stack a Source #

O(1). Push item onto Stack

(∀x)(∀s)(stackPop (stackPush s x) == Just (s,x))

stackPeek :: Stack a -> Maybe a Source #

O(1). Pop most recently added item without removing from the Stack

stackPeek stackNew == Nothing
(∀x)(∀s)(stackPeek (stackPush s x) == Just x)
(∀s)(stackPeek s == fmap snd (stackPop s))

stackPop :: Stack a -> Maybe (Stack a, a) Source #

O(1). Pop most recently added item from Stack

stackPop stackNew == Nothing
(∀x)(∀s)(stackPop (stackPush s x) == Just (s,x))

stackIsEmpty :: Stack a -> Bool Source #

O(1). Test if stack is empty

stackIsEmpty stackNew == True
(∀x)(∀s)(stackIsEmpty (stackPush s x) == True)
(∀s)((stackSize s == 0) ⇔ (stackIsEmpty s == True))

stackSize :: Stack a -> Natural Source #

O(1). Compute number of elements contained in the Stack

stackSize stackNew == 0
(∀x)(∀s)((stackSize s == n) ⇒ (stackSize (stackPush s x) == n+1))