栈
- 堆栈最早是由Alan M.Turing9(艾伦.图灵)于1946年提出的,当时是为了解决子程序的回调和返回。栈是一种后进先出的数据结构,它只能在一端进行删除和插入操作。比如一个盒子的直径只能放一个球,依次放入2、1、3号小球。如果需要拿出2号球就得先取出3号球,再取出1号球,最后才能取出2号球。
栈的常见应用:
(1) 浏览网页的时候需要回到之前的某个页面,要一步步点击后退键。
(2) 判断一个字符是否是回文字符。
(3) 验证括号的匹配。比如输入一行只包含“()[]{}”字符串,判断“([{}()])”或“{()[]{}}”是否可正确匹配。
1 package day11; 2 3 4 5 public class MyStack { 6 7 private final int count; 8 9 private String[] stackString; 10 11 private int index = -1;//索引指针,指向栈顶 12 13 14 15 public MyStack(int count) { 16 17 this.count = count; 18 19 index = -1; 20 21 stackString = new String[this.count]; 22 23 } 24 25 26 27 public MyStack() { 28 29 index = -1; 30 31 this.count = 10; 32 33 stackString = new String[this.count]; 34 35 } 36 37 38 39 /** 40 41 * 向容器里面放数据(压栈),如果超过范围就抛异常 42 43 */ 44 45 public void pushData(String s) throws ArrayIndexOutOfBoundsException { 46 47 if (index < count - 1) { 48 49 stackString[++index] = s; 50 51 } else { 52 53 System.out.println(s + "压栈溢出!"); 54 55 } 56 57 } 58 59 60 61 /** 62 63 * 从栈里面取数据 64 65 */ 66 67 public String popData() { 68 69 String s = stackString[index]; 70 71 index--; 72 73 return s; 74 75 } 76 77 78 79 public Boolean isEmpty() { 80 81 if (index == -1) { 82 83 return true; 84 85 } else { 86 87 return false; 88 89 } 90 91 } 92 93 94 95 public String toString() { 96 97 String s = ""; 98 99 for (int i = 0; i <= index; i++) { 100 101 s = s + stackString[i] + " "; 102 103 } 104 105 return s; 106 107 } 108 109 110 111 public static void main(String[] args) { 112 113 MyStack myStack = new MyStack(3);//初始化栈大小为3 114 115 myStack.pushData("aa");//向栈压入数据aa 116 117 myStack.pushData("bb");//向栈压入数据bb 118 119 myStack.pushData("cc");//向栈压入数据cc 120 121 System.out.println("压栈完成以后数据如下:"); 122 123 System.out.println((myStack.toString())); 124 125 126 127 System.out.println("开始弹栈,从栈中取数据!"); 128 129 System.out.println("------弹出1个数据以后栈中数据情况如下------"); 130 131 myStack.popData(); 132 133 System.out.println((myStack.toString())); 134 135 136 137 System.out.println("------弹出2个数据以后栈中数据情况如下------"); 138 139 myStack.popData(); 140 141 System.out.println((myStack.toString())); 142 143 144 145 System.out.println("------弹出3个数据以后(弹栈完毕以后栈中数据情况)------"); 146 147 myStack.popData(); 148 149 System.out.println((myStack.toString())); 150 151 System.out.println("弹出所有数据以后,栈是否是空的:"+myStack.isEmpty()); 152 153 } 154 155 }
执行结果:
欢迎批评指正,提出问题,谢谢!