JAVA數據結構——棧

順序棧:

棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱爲棧頂,相對地,把另一端稱爲棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成爲新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成爲新的棧頂元素。

因爲棧的先進後出特性,所以我們可以用來做很多的工作,例如:我們判斷一個數是否是迴文數(若將n的各位數字反向排列所得自然數n1與n相等,則稱n爲一回文數,如:12344321就是迴文數),我們只需要將數據壓入棧,再取出,取出的元素同原元素相等,則判斷爲迴文數。如:123被壓入棧後取出則爲321所以你懂的。。。

package com.usts.edu.stack;

/**
 * Created by Guanzhong Hu
 * Date :2019/12/28
 * Description :棧的JAVA表示,先進後出,後進先出
 * Version :1.0
 */
public interface IStack {
//    置空棧
    public void clear();

    public boolean isEmpty();// 判斷是否爲空,top=0;

    public int length();// length = top

    public Object peek();//讀取棧內元素,並返回值,若爲空則返回null

    public void push(Object x) throws Exception;//入棧操作,將x元素壓入棧頂

    public Object pop();// 刪除並返回棧頂元素

    public void display();
}
package com.usts.edu.stack;

/**
 * Created by Guanzhong Hu
 * Date :2019/12/28
 * Description : 棧的實現
 * Version :1.0
 */
public class SqlStack implements IStack {

    private Object[] stackElem; //對象數組

    private int top;// 在非空棧時,top始終指向棧頂元素的下一個存儲位置,當棧空時,top = 0

    public SqlStack(int maxSize) {
        top = 0;
        stackElem = new Object[maxSize];
    }

    @Override
    public void clear() {
        top = 0;
    }

    @Override
    public boolean isEmpty() {
        return top == 0;
    }

    @Override
    public int length() {
        return top;
    }

    @Override
    public Object peek() {
        if (!isEmpty()) {
            return stackElem[top - 1];
        } else {
            return null;
        }
    }

    @Override
    public void push(Object x) throws Exception {
        if (top == stackElem.length) throw new Exception("棧內元素已滿");
        stackElem[top] = x;
        top++;
    }

    @Override
    public Object pop() {
        if (isEmpty())
            return null;
        else 
            return stackElem[--top];
    }

    @Override
    public void display() {
        for (int i = top-1; i >=0; i--) {
            System.out.println(stackElem[i].toString()+"");
        }
    }

}

gitee源碼地址:

https://gitee.com/jockhome/data_structure

有興趣的朋友可以使用棧來實現判斷迴文數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章