java实现栈

 
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 }

 

 
posted @ 2019-07-30 09:19  修仙小华  阅读(216)  评论(0编辑  收藏  举报