模拟栈 java_Java 模拟栈结构
棧和隊列:
通常是作為程序猿的工具,用于輔助構(gòu)思算法。生命周期較短,執(zhí)行時才被創(chuàng)建
訪問受限。在特定時刻,僅僅有一個數(shù)據(jù)可被讀取或刪除
是一種抽象的結(jié)構(gòu)。內(nèi)部的實現(xiàn)機制。對用戶不可見。比方用數(shù)組、鏈表來實現(xiàn)棧
棧:
同一時候,僅僅同意一個數(shù)據(jù)被訪問,后進先出
對于入棧和出棧的時間復(fù)雜度都為O(1),即不依賴棧內(nèi)數(shù)據(jù)項的個數(shù),操作比較快
例,使用數(shù)組作為棧的存儲結(jié)構(gòu)
public class StackS {
private int max;
private T[] ary;
private int top;//指針,指向棧頂元素的下標(biāo)
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的規(guī)定。由于數(shù)組是要規(guī)定大小的,若想無限制,能夠使用其它結(jié)構(gòu)來做存儲,當(dāng)然也能夠new一個新的長度的數(shù)組。
例。使用LinkedList存儲來實現(xiàn)棧
/**
* 使用LinkedList存儲來實現(xiàn)棧
* @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結(jié)構(gòu)
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("反轉(zhuǎn)后:" + sb.toString());
}
}打印:
反轉(zhuǎn)后:社會式株
總結(jié)
以上是生活随笔為你收集整理的模拟栈 java_Java 模拟栈结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中全局变量注解_自定义注解,前端
- 下一篇: java代码统计收藏量_干货收藏 | 3