介紹
棧結(jié)構(gòu)是從數(shù)據(jù)的運(yùn)算來(lái)分類的一種數(shù)據(jù)結(jié)構(gòu),它具有特殊的運(yùn)算方式:先進(jìn)后出
而且它的存儲(chǔ)方式可以是順序表,也可以是鏈表(你也可以理解為是被賦予了特定運(yùn)算規(guī)律的數(shù)據(jù)結(jié)構(gòu))
順序棧:使用一組地址連續(xù)的內(nèi)存單元存儲(chǔ)數(shù)據(jù),序號(hào)為0的元素 == 棧底,另外設(shè)置變量top == 棧頂
鏈?zhǔn)綏#菏褂面湵斫Y(jié)構(gòu)來(lái)保存棧的數(shù)據(jù),鏈頭 == 棧底,鏈尾 == 棧頂
結(jié)構(gòu)圖

入棧操作.png

出棧操作.png
Java代碼實(shí)現(xiàn)
/**
* 順序棧結(jié)構(gòu)
* Created by Sheldon on 2019/4/3.
* Project Name: alstudy.
* Package Name: linklist.
*/
// 順序棧結(jié)構(gòu)
public class ArrStack {
// 棧的最大容量
static final int MAXLEN=10;
// 存儲(chǔ)數(shù)據(jù)
private String datas[] = new String[MAXLEN];
// 棧頂位置
private int top = 0;
/**
* 入棧
* @return
*/
public boolean PushStack(String data){
// 判斷棧是否滿了
if(top==MAXLEN){
System.out.println("棧滿了,請(qǐng)釋放空間");
return false;
}else {
// 數(shù)據(jù)入棧
datas[top++] = data;
return true;
}
}
/**
* 出棧
* @return
*/
public String PopStack(){
// 判斷棧是否為空
if (top==0){
System.out.println("棧為空");
return null;
}else {
// 數(shù)據(jù)出棧
return datas[--top];
}
}
/**
* 讀取棧頂數(shù)據(jù)
* @return
*/
public String PeekStack(){
// 判斷棧頂是否為空
if (top==0){
System.out.println("棧為空");
return null;
}else {
return datas[top-1];
}
}
/**
* 判斷棧是否為空
* @return
*/
public boolean isNull(){
return top==0 ? true:false;
}
/**
* 判斷棧是否滿了
* @return
*/
public boolean isFull(){
return top==MAXLEN ? true:false;
}
/**
* 獲取棧數(shù)據(jù)的大小
* @return
*/
public int size(){
return top;
}
public static void main(String[] args) {
// 創(chuàng)建棧
ArrStack stack = new ArrStack();
// 判斷棧空
System.out.println(stack.isNull());
// 入棧
stack.PushStack("數(shù)據(jù)1");
// 查看棧頂數(shù)據(jù)
System.out.println(stack.PeekStack());
// 再次入棧
stack.PushStack("數(shù)據(jù)2");
stack.PushStack("數(shù)據(jù)3");
// 查看棧頂數(shù)據(jù)
System.out.println(stack.PeekStack());
// 出棧
stack.PopStack();
// 查看棧頂數(shù)據(jù)
System.out.println(stack.PeekStack());
// 查看棧的大小
System.out.println(stack.size());
}
}
運(yùn)行結(jié)果

運(yùn)行結(jié)果.png