Java 数据结构栈 Java 鞍式搜索 Java基于LinkedListStack的栈 Java 数据结构栈 import java.util.ArrayList; /** * This class implements a Stack using two different implementations. * Stack is used with a regular array and Stack2 uses an ArrayList. * * A stack is exactly what it sounds like. An element gets added to the top of * the stack and only the element on the top may be removed. This is an example * of an array implementation of a Stack. So an element can only be added/removed * from the end of the array. In theory stack have no fixed size, but with an * array implementation it does. * * @author Unknown * */ class Stack{ /** The max size of the Stack */ private int maxSize; /** The array representation of the Stack */ private int[] stackArray; /** The top of the stack */ private int top; /** * Constructor * * @param size Size of the Stack */ public Stack(int size){ maxSize = size; stackArray = new int[maxSize]; top = -1; } /** * Adds an element to the top of the stack * * @param value The element added */ public void push(int value){ if(!isFull()){ //Checks for a full stack top++; stackArray[top] = value; }else{ resize(maxSize*2); push(value);// don't forget push after resizing } } /** * Removes the top element of the stack and returns the value you've removed * * @return value popped off the Stack */ public int pop(){ if(!isEmpty()){ //Checks for an empty stack return stackArray[top--]; } if(top < maxSize/4){ resize(maxSize/2); return pop();// don't forget pop after resizing } else{ System.out.println("The stack is already empty"); return -1; } } /** * Returns the element at the top of the stack * * @return element at the top of the stack */ public int peek(){ if(!isEmpty()){ //Checks for an empty stack return stackArray[top]; }else{ System.out.println("The stack is empty, cant peek"); return -1; } } private void resize(int newSize){ //private int[] transferArray = new int[newSize]; we can't put modifires here ! int[] transferArray = new int[newSize]; //for(int i = 0; i < stackArray.length(); i++){ the length isn't a method . for(int i = 0; i < stackArray.length; i++){ transferArray[i] = stackArray[i]; stackArray = transferArray; } maxSize = newSize; } /** * Returns true if the stack is empty * * @return true if the stack is empty */ public boolean isEmpty(){ return(top == -1); } /** * Returns true if the stack is full * * @return true if the stack is full */ public boolean isFull(){ return(top+1 == maxSize); } /** * Deletes everything in the Stack * * Doesn't delete elements in the array * but if you call push method after calling * makeEmpty it will overwrite previous * values */ public void makeEmpty(){ //Doesn't delete elements in the array but if you call top = -1; //push method after calling makeEmpty it will overwrite previous values } } /** * This is an ArrayList Implementation of stack, Where size is not * a problem we can extend the stack as much as we want. * * @author Unknown * */ class Stack2{ /** ArrayList representation of the stack */ ArrayList<Integer> stackList; /** * Constructor */ Stack2(){ stackList=new ArrayList<>(); } /** * Adds value to the end of list which * is the top for stack * * @param value value to be added */ void push(int value){ stackList.add(value); } /** * Pops last element of list which is indeed * the top for Stack * * @return Element popped */ int pop(){ if(!isEmpty()){ // checks for an empty Stack int popValue=stackList.get(stackList.size()-1); stackList.remove(stackList.size()-1); //removes the poped element from the list return popValue; } else{ System.out.print("The stack is already empty "); return -1; } } /** * Checks for empty Stack * * @return true if stack is empty */ boolean isEmpty(){ if(stackList.isEmpty()) return true; else return false; } /** * Top element of stack * * @return top element of stack */ int peek(){ return stackList.get(stackList.size()-1); } } /** * This class implements the Stack and Stack2 created above * * @author Unknown * */ public class Stacks{ /** * Main method * * @param args Command line arguments */ public static void main(String args[]){ Stack myStack = new Stack(4); //Declare a stack of maximum size 4 //Populate the stack myStack.push(5); myStack.push(8); myStack.push(2); myStack.push(9); System.out.println("*********************Stack Array Implementation*********************"); System.out.println(myStack.isEmpty()); //will print false System.out.println(myStack.isFull()); //will print true System.out.println(myStack.peek()); //will print 9 System.out.println(myStack.pop()); //will print 9 System.out.println(myStack.peek()); // will print 2 Stack2 myStack2 = new Stack2(); //Declare a stack of maximum size 4 //Populate the stack myStack2.push(5); myStack2.push(8); myStack2.push(2); myStack2.push(9); System.out.println("*********************Stack List Implementation*********************"); System.out.println(myStack2.isEmpty()); //will print false System.out.println(myStack2.peek()); //will print 9 System.out.println(myStack2.pop()); //will print 9 System.out.println(myStack2.peek()); // will print 2 System.out.println(myStack2.pop()); //will print 2 } } Java 鞍式搜索 Java基于LinkedListStack的栈