演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理
思路:
需要一個棧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();
}
}
如果有不對的地方大家相互請教
相關文章
- 順序棧————遍歷、出棧、入棧
- 順序棧、鏈棧基本操作
- 棧1: 順序儲存
- 順序棧的簡單操作
- 順序棧的實現方式
- 區域性變數申請棧空間時的入棧順序變數
- 資料結構:棧的基本概念、順序棧、共享棧以及鏈棧資料結構
- 順序棧與鏈式棧的圖解與實現圖解
- PHP實現簡單順序棧PHP
- 利用順序棧完成的作業題(C語言)C語言
- python實現基本資料結構第二篇(順序棧、鏈棧,順序隊、鏈隊)Python資料結構
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- 【演算法】輸入兩個整數序列。其中一個序列表示棧的push順序,判斷另一個序列有沒有可能是對應的pop順序。演算法
- 資料結構 順序棧(c語言)資料結構C語言
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- 利用棧和隊來判斷輸入的一個字串是否為迴文字串
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- 第五週 專案1 建立順序棧演算法庫演算法
- 棧是按照順序且連續儲存值
- 【資料結構】順序棧的實現(c++)資料結構C++
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- c語言順序棧常規插入刪除操作C語言
- 資料結構(筆試題-棧(入棧出棧)資料結構筆試
- 棧,佇列,優先順序佇列簡單介面使用佇列
- javascript載入順序JavaScript
- WIN10如何更改輸入法順序 win10怎樣修改電腦輸入法順序Win10
- OJ刷題之《輸入三個字串,按由小到大的順序輸出》字串
- java類載入順序Java
- [Web]HTML載入順序WebHTML
- SpringBoot配置檔案優先順序載入順序Spring Boot
- 《演算法筆記二》連結串列、棧、佇列、遞迴、雜湊表、順序表演算法筆記佇列遞迴
- 優化資料庫的合理順序優化資料庫
- Python 模組的載入順序Python
- Java父子類載入順序Java
- 頁面載入順序jQueryjQuery
- windows驅動載入順序Windows
- 在實驗中觀察指標——C++ 函式引數的壓棧順序指標C++函式
- arm64 架構之入棧/出棧操作架構