1.什么是栈
栈(stack)是仅在表尾部插入和删除的操作的线性表
1.允许插入和删除的一段称之为栈顶(top),另一端称之为栈尾(bottom)
2.不包含任何数据元素的栈称之为空栈
特点:先进后出,后进先出
注意:1.栈也称之为lifo结构
2.栈的插入操作称之为进栈,也称之为压栈,入栈
3.栈的删除操作。称之为出栈,也称之为弹栈
3.实现细节和注意要点
栈最重要的是它的特点:先进后出,在生活中有很多场景类似。在一个栈的结构里需要定义栈的大小Maxsize,定义一个游标top,初始化为-1,用来指向栈尾,当入栈一个数据,top+1,弹栈一个数据top-1,第一次入栈top就变为0,当top变为-1,说明栈空了,当top变为Maxsize-1,说明栈满了。
stack类:
1 package Stack; 2 /** 3 * @类名 stack.java 4 * @作者 修仙小华 5 * @版本 V1.0 6 * @日期 2019年7月23日-下午3:59:27 7 * @描述 8 * 9 */10 public class stack {11 private int maxSize;//栈的大小12 private int top;//栈顶下标,top是移动的13 String[] arr;14 char[] arrC;15 int[] arrI;16 17 public stack(){18 }19 20 /**21 * 设置传入参数为int的构造方法22 */23 public stack (int size) {24 this.maxSize=size;25 top=-1;//初始化为-126 arr=new String[maxSize];27 arrC=new char[maxSize];28 arrI=new int[maxSize];29 }30 31 /**32 *设置传入参数为String的构造方法33 */34 public stack (String input) {35 this.maxSize=input.length();36 top=-1;//初始化为-137 arr=new String[maxSize];38 }39 40 /**41 * 入栈,整数 字符型 字符串型数据入栈方法重载42 */43 public void push(String data) {44 arr[++top]=data;45 }46 public void push(char data) {47 arrC[++top]=data;48 }49 public void push(int data) {50 arrI[++top]=data;51 }52 /**53 * 入栈,整数 字符型 字符串型数据出栈方法54 */55 public String pop() {56 return arr[top--];57 }58 public char popC() {59 return arrC[top--];60 }61 public int popI() {62 return arrI[top--];63 }64 /**65 * 获取栈顶元素66 */67 public String peek() {68 return arr[top];69 }70 public char peekC() {71 return arrC[top];72 }73 public int peekI() {74 return arrI[top];75 }76 /**77 * 判断栈是否满了78 */79 public boolean isFull() {80 return maxSize-1==top;81 }82 /**83 * 判断栈是否为空84 */85 public boolean isEmpty() {86 return top==-1;87 }88 /**89 * 利用栈将将字符串反序输出90 */91 92 }
使用栈实现字符串的逐个字符输出:
public class Reseve { String input; public Reseve(String input) { this.input=input; } public String doReseve() { stack sta=new stack(input.length()); for (int i = 0; i < sta.arr.length; i++) { sta.push(input.charAt(i)); } String output=""; while(sta.isEmpty()!=true) { output=output+sta.popC(); } return output; }}
测试类:
1 public class stactTest { 2 3 public static void main(String[] args) { 4 stack sta=new stack(4); 5 Reseve re=new Reseve("ABCDE"); 6 sta.push("张三"); 7 sta.push("李四"); 8 sta.push("王二"); 9 sta.push("李四");10 System.out.println(sta.isEmpty());11 System.out.println(sta.peek());12 sta.peek();13 sta.pop();14 System.out.println(re.doReseve());15 }16 17 }