演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理
思路:
需要一個棧s
入棧順序a
出棧順序b
1.先拿a的第一個元素入棧
2.取b中第一元素與s棧頂層元素比較,相同出棧,在取b中下一個元素與棧頂元素比較
3.不相同,則取a中下一個元素,入棧
4.重複2.3
5.當a.b中元素都取完了之後,或者a中元素全部入棧,二此時b中獲取的元素與s棧頂元素不同跳出迴圈
6.返回s棧是否為空,為空符合,不為空不符合
程式碼:
package Test;
import java.util.Stack;
public class StackLegal<T> {
Stack<T> stack = new Stack<>();
public boolean judge(T[] in, T[] out) {
int in_size = in.length;//判斷入棧資料長度
int out_size = out.length;//判斷出棧資料長度
int in_in = 0;//記著入棧元素位置
int out_out = 0;//記著下一個出棧的資料位置
boolean b = true;//判斷是否對是否符合出棧順序有結果
if (in_size != out_size) {//如果長度不一樣直接false
return false;
}
//將第一元素入棧
stack.push(in[in_in]);
//判斷
while (b) {
if(stack.isEmpty())break;
T t=stack.pop();
//判斷是否完成
//如果此時資料全部入棧,且棧中第一個元素和現在出棧的元素不同,則跳出迴圈
if (in_in >= in_size &&(out_out>=out_size||(!t.equals(out[out_out])))) {
b = false;
}
//判斷是否出棧
if ( t.equals(out[out_out])) {
out_out++;
//判斷是否入棧
} else {
stack.push(t);
if(++in_in< in_size) {
stack.push(in[in_in]);
}
}
}
return stack.isEmpty();
}
}
如果有不對的地方大家相互請教
相關文章
- 順序棧————遍歷、出棧、入棧
- 關於 i=i++ 問題、入棧順序
- 棧1: 順序儲存
- 順序棧的實現方式
- 資料結構:棧的基本概念、順序棧、共享棧以及鏈棧資料結構
- 順序棧與鏈式棧的圖解與實現圖解
- python實現基本資料結構第二篇(順序棧、鏈棧,順序隊、鏈隊)Python資料結構
- 利用順序棧完成的作業題(C語言)C語言
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- 資料結構 順序棧(c語言)資料結構C語言
- 利用棧和隊來判斷輸入的一個字串是否為迴文字串
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- 推導相等優先順序為何彈出棧頂
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- 棧是按照順序且連續儲存值
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- c語言順序棧常規插入刪除操作C語言
- 資料結構(筆試題-棧(入棧出棧)資料結構筆試
- 棧,佇列,優先順序佇列簡單介面使用佇列
- SpringBoot配置檔案優先順序載入順序Spring Boot
- WIN10如何更改輸入法順序 win10怎樣修改電腦輸入法順序Win10
- 輸入三個數按從大到小的順序輸出
- 《演算法筆記二》連結串列、棧、佇列、遞迴、雜湊表、順序表演算法筆記佇列遞迴
- Python 模組的載入順序Python
- Java父子類載入順序Java
- 順序刷題
- gson改變輸出欄位的順序
- 中斷優先順序
- C++輸出流cout的執行順序問題C++
- arm64 架構之入棧/出棧操作架構
- Spring如何控制Bean的載入順序SpringBean
- 在實驗中觀察指標——C++ 函式引數的壓棧順序指標C++函式
- [springboot]配置檔案載入順序Spring Boot
- jsoncpp按寫入順序讀取JSON
- day-25-類的繼承順序-父類對子類的約束-多型-佇列和棧繼承多型佇列
- 資料結構與演算法——棧(一)【棧的快速入門】資料結構演算法
- 影像延遲載入 && 列表圖順序載入
- mysql order by 和 group by 順序問題MySql