Stack: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 8: Line 8:


A '''stack''' is a [[Data_Structures#Dynamic_Set|dynamic set]] in which the the [[Data Structures#DELETE|DELETE]] operation, which does not have any argument, removes the most recently inserted element. The stack implements a ''last-in-first-out'', or LIFO, policy. The [[Data Structures#INSERT|INSERT]] operation for a stack is called '''PUSH'''. The [[Data Structures#DELETE|DELETE]] operation is called '''POP'''. If the stack contains no elements it is said to be '''empty'''. If POP() operation is invoked on an empty stack, we say that the stack '''underflows'''. If PUSH() operation is called on a full stack, we say that the stack '''overflows'''.
A '''stack''' is a [[Data_Structures#Dynamic_Set|dynamic set]] in which the the [[Data Structures#DELETE|DELETE]] operation, which does not have any argument, removes the most recently inserted element. The stack implements a ''last-in-first-out'', or LIFO, policy. The [[Data Structures#INSERT|INSERT]] operation for a stack is called '''PUSH'''. The [[Data Structures#DELETE|DELETE]] operation is called '''POP'''. If the stack contains no elements it is said to be '''empty'''. If POP() operation is invoked on an empty stack, we say that the stack '''underflows'''. If PUSH() operation is called on a full stack, we say that the stack '''overflows'''.
[[File:StackWithArray.png]]


=Implementation=
=Implementation=

Revision as of 21:01, 11 August 2018

Internal

Overview

A stack is a dynamic set in which the the DELETE operation, which does not have any argument, removes the most recently inserted element. The stack implements a last-in-first-out, or LIFO, policy. The INSERT operation for a stack is called PUSH. The DELETE operation is called POP. If the stack contains no elements it is said to be empty. If POP() operation is invoked on an empty stack, we say that the stack underflows. If PUSH() operation is called on a full stack, we say that the stack overflows.

Implementation

The following code shows how to implement a simple stack of ints, backed by an integer array. The stack capacity is dictated by the length of the array.

/**
 * A stack of ints.
 */
public class Stack {

    private int[] storage;

    //
    // 'top' indicates the first *free* location in storage. 
    // For an empty stack, top is 0 and for a full stack, 
    // top is equal with storage.length
    //
    private int top;

    public Stack(int capacity) {

        this.storage = new int[capacity];
        this.top = 0;
    }

    public void push(int i) throws StackOverflowException {

        if (top == storage.length) {

            throw new StackOverflowException();
        }

        storage[top ++] = i;
    }

    public int pop() throws StackUnderflowException {

        if (top == 0) {

            throw new StackUnderflowException();
        }

        return storage[-- top];
    }

    public boolean isEmpty() {

        return top == 0;
    }

    public boolean isFull() {

        return top == storage.length;
    }
}