基本概念
棧作爲一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。基本算法
1.進棧(PUSH)算法③TOP=TOP-1,結束(棧指針減1,指向棧頂)。
Java自定義棧的實現
棧是一種重要的數據結構,廣泛應用於我們的編程之中,例如多項式求值、平衡輸入和方法的調用等。我們都知道,在java中定義了一個Stack類,但現在,我們不使用這個,而是自己定義一個Stack類,來了解一下棧的一些基本操作及特點。代碼如下:
// Stack.java
package org.mdy;
public class Stack{
private int top=-1; //棧頂指針
private Object [] item; //用Object類存放入棧的數據
private int size=0; //棧已存數據的長度
private int capacity=10; //棧的初始化容量
private int increament=5; //棧的增量
public Stack(){
this.item=new Object[capacity];
}
public void push(Object obj){ //入棧操作
if(capacity==size){ //若棧已存滿,則增加棧的容量大小
capacity+=increament;
Object[] newitem=new Object[capacity];
for(int i=0;i<size;i++){
newitem[i]=item[i];
}
item=newitem;
}
item[top+1]=obj;
size++;
top++;
}
public Object pop(){ //出棧操作
Object obj=null;
if(top>-1){
obj=item[top];
top--;
size--;
}else{
System.out.println("棧已爲空!!");
}
return obj;
}
public int getSize(){ //得到棧已存數據的長度
return this.size;
}
}
下面定義一個類來測試一下:
//MyStack.java
import org.mdy.Stack;
public class MyStack{
public static void main(String args[]){
Stack sk=new Stack();
for(int i=0;i<13;i++){ //將0-12入棧
sk.push(i);
}
int len=sk.getSize();
for(int i=0;i<len;i++){ //輸出棧中數據
System.out.print(sk.pop()+" ");
}