順序棧:
棧(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
有興趣的朋友可以使用棧來實現判斷迴文數。