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;//初始化为-1 26 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;//初始化为-1 37 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 }