Java數(shù)據(jù)結構之棧的線性結構詳解
一:棧
棧是限制插入和刪除只能在一個位置上進行的表,此位置就是表的末端,叫作棧頂。
棧的基本操作分為push(入棧) 和 pop(出棧),前者相當于插入元素到表的末端(棧頂),后者相當于刪除棧頂?shù)脑亍?/p>

二:棧的實現(xiàn)
public class LinearStack {
/**
* 棧的初始默認大小為10
*/
private int size = 5;
/**
* 指向棧頂?shù)臄?shù)組下標
*/
int top = -1;
/**
* 定義棧stack
*/
private int[] stack;
public LinearStack() {
stack = new int[size];
}
/**
* 判斷棧滿
*/
public boolean isFull() {
boolean result = false;
if(top == size - 1) {
result = true;
}
return result;
}
/**
* 入棧操作push
*/
public void push(int value) {
/**
* 如果棧滿,拓展棧的容量
*/
if(isFull())
stack = expansionStack();
top++;
stack[top] = value;
}
/**
* 出棧操作
*/
public int pop() {
if(top == -1)
throw new RuntimeException("??眨〕鰲J?);
int result = stack[top] ;
top--;
return result;
}
/**
* 擴充容量
*/
public int[] expansionStack() {
size = size + 10;
int[] stackTemp = new int[size];
for (int i = 0; i < stack.length; i++) {
stackTemp[i] = stack[i];
}
return stackTemp;
}
/**
* 獲取棧頂?shù)脑?
*/
public int getTop() {
return stack[top];
}
/**
* 顯示棧中的全部元素
*/
public String toString() {
String str = "[";
for (int i = 0; i <= top; i++) {
if(i == top)
str = str + stack[i] + "]";
else
str = str + stack[i] + ",";
}
return str;
}
}
三:棧的測試
public class LinearStackTest {
public static void main(String[] args) {
LinearStack linearStack = new LinearStack();
/**
* 元素入棧
*/
linearStack.push(1);
linearStack.push(2);
linearStack.push(3);
linearStack.push(4);
linearStack.push(5);
/**
* 棧滿,顯示棧中所有元素
*/
System.out.println("0:arrayStack " + linearStack.toString());
/**
* 再次入棧
*/
linearStack.push(6);
/**
* 再次顯示占中的所有元素
*/
System.out.println("1:arrayStack: " + linearStack.toString());
/**
* 獲取棧頂元素
*/
System.out.println("獲取棧頂元素:stack[top] = " + linearStack.getTop()+" top = " + linearStack.top);
/**
* 出棧
*/
System.out.println("出棧:stack[top] = " + linearStack.pop()+" top = " + linearStack.top);
/**
* 再次顯示棧中的元素
*/
System.out.println("2:arrayStack: " + linearStack.toString());
}
}
四:棧的應用(回文序列的判斷)
public class LinearStackChar {
private int size = 5;
/**
* 指向棧頂?shù)臄?shù)組下標
*/
int top = -1;
/**
* 定義棧stack
*/
private char[] stack;
public LinearStackChar() {
stack = new char[size];
}
/**
* 判斷棧滿
*/
public boolean isFull() {
boolean result = false;
if(top == size - 1) {
result = true;
}
return result;
}
/**
* 入棧操作push
*/
public void push(char value) {
/**
* 如果棧滿,拓展棧的容量
*/
if(isFull())
stack = expansionStack();
top++;
stack[top] = value;
}
/**
* 出棧操作
*/
public char pop() {
if(top == -1)
throw new RuntimeException("???!出棧失敗");
char result = stack[top] ;
top--;
return result;
}
/**
* 擴充容量
*/
public char[] expansionStack() {
size = size + 10;
char[] stackTemp = new char[size];
for (int i = 0; i < stack.length; i++) {
stackTemp[i] = stack[i];
}
return stackTemp;
}
/**
* 獲取棧頂?shù)脑?
*/
public char getTop() {
return stack[top];
}
/**
* 顯示棧中的全部元素
*/
public String toString() {
String str = "[";
for (int i = 0; i <= top; i++) {
if(i == top)
str = str + stack[i] + "]";
else
str = str + stack[i] + ",";
}
return str;
}
}
public class LinearStackCharTest {
public static void main(String[] args) {
/**
* 判斷一個字符串a(chǎn)bcba是不是回文序列?
* 思路:將字符串切割成為單個字符,存放在字符棧中;
* 然后出棧,判斷出棧后字符數(shù)組組成的字符串是否和原字符串相等;
* 相等--回文序列
* 不相等--不是回文序列
*/
String str = "abcba";
LinearStackChar linearStackChar = new LinearStackChar();
//講字符串切割,存放在棧中
for (int i = 0; i < str.length(); i++) {
linearStackChar.push(str.charAt(i));
}
//存放完成,顯示棧中的元素
System.out.println("stack = " + linearStackChar.toString());
//出棧
String result = "";
int length = linearStackChar.top;
System.out.println("top = " + length);
for (int i = 0; i <= length; i++) {
result = result + String.valueOf(linearStackChar.pop());
}
//出棧組成的字符串
System.out.println("result = " + result);
//判斷是否相等
System.out.println("result = abcba? " + (result.equals("abcba") ? true : false));
}
}
總結
到此這篇關于Java數(shù)據(jù)結構之棧的線性結構的文章就介紹到這了,更多相關Java棧的線性結構內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring的事件發(fā)布與監(jiān)聽方式案例講解
今天去官網(wǎng)查看spring?boot資料時,在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關于SpringBoot事件發(fā)布和監(jiān)聽的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-03-03
Spring boot使用spring retry重試機制的方法示例
這篇文章主要介紹了Spring boot使用spring retry重試機制的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01
利用Java異常機制實現(xiàn)模擬借書系統(tǒng)
這篇文章主要給大家介紹了利用Java異常機制實現(xiàn)模擬借書系統(tǒng)的相關資料,文中先對java異常機制進行了簡單介紹,而后通過示例代碼介紹了java語言是如何實現(xiàn)一個控制臺版的模擬借書系統(tǒng),需要的朋友可以參考學習,一起來看看吧。2017-04-04
Springboot 整合 Java DL4J 實現(xiàn)時尚穿搭推薦系統(tǒng)(實例代碼)
本文介紹了如何使用SpringBoot和JavaDeeplearning4j框架搭建一個時尚穿搭推薦系統(tǒng),文章詳細闡述了系統(tǒng)的技術架構、數(shù)據(jù)集格式、Maven依賴配置、模型訓練和預測代碼實現(xiàn),以及單元測試和預期輸出結果2024-10-10
如何用Java將數(shù)據(jù)庫的數(shù)據(jù)生成pdf返回給前端用戶下載
本文詳細介紹了使用SpringBoot、iText庫、MyBatis等技術從數(shù)據(jù)庫中選取數(shù)據(jù)并生成PDF文件的后端處理流程,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-09-09
Java中弱引用和軟引用的區(qū)別以及虛引用和強引用介紹
很早Java API就添加了弱引用(WeakReference)和軟引用(SoftReference),但并不是所有的程序員都熟悉這兩個概念2014-04-04

