模拟栈 java_Java 模拟栈结构
棧和隊列:
通常是作為程序猿的工具,用于輔助構思算法。生命周期較短,執行時才被創建
訪問受限。在特定時刻,僅僅有一個數據可被讀取或刪除
是一種抽象的結構。內部的實現機制。對用戶不可見。比方用數組、鏈表來實現棧
棧:
同一時候,僅僅同意一個數據被訪問,后進先出
對于入棧和出棧的時間復雜度都為O(1),即不依賴棧內數據項的個數,操作比較快
例,使用數組作為棧的存儲結構
public class StackS {
private int max;
private T[] ary;
private int top;//指針,指向棧頂元素的下標
public StackS(int size) {
this.max = size;
ary = (T[]) new Object[max];
top = -1;
}
// 入棧
public void push(T data) {
if (!isFull())
ary[++top] = data;
}
// 出棧
public T pop() {
if (isEmpty()) {
return null;
}
return ary[top--];
}
// 查看棧頂
public T peek() {
return ary[top];
}
//棧是否為空
public boolean isEmpty() {
return top == -1;
}
//棧是否滿
public boolean isFull() {
return top == max - 1;
}
//size
public int size() {
return top + 1;
}
public static void main(String[] args) {
StackS stack = new StackS(3);
for (int i = 0; i < 5; i++) {
stack.push(i);
System.out.println("size:" + stack.size());
}
for (int i = 0; i < 5; i++) {
Integer peek = stack.peek();
System.out.println("peek:" + peek);
System.out.println("size:" + stack.size());
}
for (int i = 0; i < 5; i++) {
Integer pop = stack.pop();
System.out.println("pop:" + pop);
System.out.println("size:" + stack.size());
}
System.out.println("----");
for (int i = 5; i > 0; i--) {
stack.push(i);
System.out.println("size:" + stack.size());
}
for (int i = 5; i > 0; i--) {
Integer peek = stack.peek();
System.out.println("peek:" + peek);
System.out.println("size:" + stack.size());
}
for (int i = 5; i > 0; i--) {
Integer pop = stack.pop();
System.out.println("pop:" + pop);
System.out.println("size:" + stack.size());
}
}
}
上面的樣例。有一個maxSize的規定。由于數組是要規定大小的,若想無限制,能夠使用其它結構來做存儲,當然也能夠new一個新的長度的數組。
例。使用LinkedList存儲來實現棧
/**
* 使用LinkedList存儲來實現棧
* @author stone
*
* @param
*/
public class StackSS {
private LinkedList datas;
public StackSS() {
datas = new LinkedList();
}
// 入棧
public void push(T data) {
datas.addLast(data);
}
// 出棧
public T pop() {
return datas.removeLast();
}
// 查看棧頂
public T peek() {
return datas.getLast();
}
//棧是否為空
public boolean isEmpty() {
return datas.isEmpty();
}
//size
public int size() {
return datas.size();
}
public static void main(String[] args) {
StackS stack = new StackS(3);
for (int i = 0; i < 5; i++) {
stack.push(i);
System.out.println("size:" + stack.size());
}
for (int i = 0; i < 5; i++) {
Integer peek = stack.peek();
System.out.println("peek:" + peek);
System.out.println("size:" + stack.size());
}
for (int i = 0; i < 5; i++) {
Integer pop = stack.pop();
System.out.println("pop:" + pop);
System.out.println("size:" + stack.size());
}
System.out.println("----");
for (int i = 5; i > 0; i--) {
stack.push(i);
System.out.println("size:" + stack.size());
}
for (int i = 5; i > 0; i--) {
Integer peek = stack.peek();
System.out.println("peek:" + peek);
System.out.println("size:" + stack.size());
}
for (int i = 5; i > 0; i--) {
Integer pop = stack.pop();
System.out.println("pop:" + pop);
System.out.println("size:" + stack.size());
}
}
}
例,單詞逆序,使用Statck結構
public class WordReverse {
public static void main(String[] args) {
reverse("株式會社");
}
static void reverse(String word) {
if (word == null) return;
StackSS stack = new StackSS();
char[] charArray = word.toCharArray();
int len = charArray.length;
for (int i = 0; i
stack.push(charArray[i]);
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
System.out.println("反轉后:" + sb.toString());
}
}打印:
反轉后:社會式株
總結
以上是生活随笔為你收集整理的模拟栈 java_Java 模拟栈结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中全局变量注解_自定义注解,前端
- 下一篇: java里面赋值运算符解释_java复合