NOTE

Stack with a min Function

Record using an auxiliary minimum stack to retrieve the stack minimum in O(1) time.

Data Structures & AlgorithmsCreated Updated 1 min readhistorical

This is a historical learning note and may contain outdated or incomplete understanding.

1. Problem Description

Define a stack data structure and implement a min function in this type that can obtain the minimum element contained in the stack, with O(1) time complexity.

2. Approach

  • Use an additional minimum-value stack

3. Implementation

package main

var data []int
var minStack []int

func stackPush(stack *[]int, num int) {
	*stack = append(*stack, num)
}

func stackPop(stack *[]int) int {
	top := (*stack)[len(*stack)-1]
	*stack = (*stack)[:len(*stack)-1]
	return top
}

func stackEmpty(stack []int) bool {
	return len(stack) == 0
}

func stackTop(stack []int) int {
	return stack[len(stack)-1]
}

func Push(node int) {
	if stackEmpty(data) {
		stackPush(&data, node)
		stackPush(&minStack, node)
		return
	}

	top := stackTop(minStack)
	if top < node {
		stackPush(&minStack, top)
	} else {
		stackPush(&minStack, node)
	}
	stackPush(&data, node)
}
func Pop() {
	if stackEmpty(data) {
		return
	}
	stackPop(&minStack)
	stackPop(&data)

}
func Top() int {
	if stackEmpty(data) {
		return 0
	}
	return stackTop(data)
}
func Min() int {
	if stackEmpty(minStack) {
		return 0
	}
	return stackTop(minStack)
}

4. References

Discussion

Sign in with GitHub to comment. Discussions are stored as GitHub Issues.View on GitHub