栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
创建MyStak栈及其方法
1 package com.feimao.com.feimao.a2.test; 2 3 public class MyStack { 4 int[] elements; 5 public MyStack(){ 6 elements = new int[0]; 7 } 8 //压入元素 9 public void push(int element){ 10 int[] newArr = new int[elements.length + 1]; 11 for(int i = 0 ; i < elements.length ; i++){ 12 newArr[i] = elements[i]; 13 } 14 newArr[elements.length] = element; 15 elements = newArr; 16 } 17 //取出栈顶元素 18 public int pop() { 19 if (elements.length == 0) { 20 throw new RuntimeException("stack is empty"); 21 } 22 //取出数组中最后1个元素 23 int element = elements[elements.length - 1]; 24 //创建一个新数组 25 int[] newArr = new int[elements.length - 1]; 26 //除了最后一个取走的元素,其他元素复制到新数组 27 for (int i = 0; i < elements.length - 1; i++) { 28 newArr[i] = elements[i]; 29 } 30 //替换数组 31 elements = newArr; 32 //返回栈顶元素 33 return element; 34 } 35 //查看栈顶元素 36 public int peek(){ 37 return elements[elements.length - 1]; 38 } 39 40 41 42 43 }
创建测试类
1 package com.feimao.com.feimao.a2.test; 2 3 import java.util.Arrays; 4 5 public class MyStackTest { 6 public static void main(String[] args){ 7 MyStack ms = new MyStack(); 8 for(int i = 0 ; i < 10 ; i++){ 9 ms.push(i); 10 } 11 System.out.println(ms.peek()); 12 System.out.println(ms.pop()); 13 14 15 16 } 17 }