棧的經典例題
1.棧排序
題目背景:
給出定乙個已經裝有數的棧,要求使用乙個輔助棧,完成原始棧的排序,且除必要單變數外,不用其它任何資料結構(包括陣列),即你可以使用的資料結構只有一種、兩個:原始棧和輔助棧。
輸入格式:
第一行乙個數n,表示原棧裡面數的個數
第二行n個整數,按照原始棧從棧底到棧頂的順序給出。
輸出格式:
一行n個整數,按照從大到小的順序輸出,每兩個數字之間兩個空格
解題思路:
(1)由於只有兩個棧,那麼原始棧就用來儲存資料,而輔助棧就用來做排序工作
(2)當輔助棧沒有元素的時候就把原始棧的棧頂移動到輔助棧裡面去
(3)由於要從大到小輸出,而棧的結構是後進先出,所以從棧底到棧頂應該是有小到大
(4)現在從原始棧中取資料,如果原始棧的棧頂元素大於或者等於輔助棧的棧頂元素,那麼直接將資料移入即可;但是當原始棧的棧頂元素小於輔助棧的棧頂元素時,應該將該資料儲存到乙個單變數中,然後從輔助棧的棧頂開始想原始棧中塞入資料,直到棧頂元素小於或等於該元素時,將該元素壓入棧中。
(5)要考慮到棧是否為空的情況喲
至此思路結束,下面是**實現:
#include
#include
using
namespace std;
intmain()
num_sort.
push
(num_data.
top())
; num_data.
pop();
while
(!num_data.
empty()
)else
num_sort.
push
(temp);}
}while
(!num_sort.
empty()
)}
2.驗證出棧順序
題目背景:
給定乙個入棧順序和乙個出棧結果,你需要判斷基於給定的入棧順序,能不能實現給出的出棧結果?
如:給出入棧順序1,2,3,4,5和出棧結果3,4,2,5,1。
1.1入棧
2.2入棧
3.3入棧
4.3出棧
5.4入棧
6.4出棧
7.2出棧
8.5入棧
9.5出棧
101出棧
至此便可得到3,4,2,5,1的出棧結果。
但是我要是給出1,2,3,4,5作為入棧順序和5,3,4,2,1作為出棧結果,那麼此時便是無解的。因為1,2,3,4,5作為入棧順序是無論如何也無法得到5,3,4,2,1作為出棧結果的。
題目描述:
給定若干組入棧順序和出棧結果,要求判斷它們分別有沒有解。
輸入格式:
第一行乙個整數t,表示你需要驗證的組數
接下來3×t行,每三行中:
第一行乙個正整數n,表示需要驗證的棧的規模
接下來兩行,分別對應給出的入棧順序和出棧結果
(給出的入棧順序和出棧結果均為1->n的自然數)
輸出格式:
輸出t行,yes和no分別代表每組資料所給出的出棧結果時候能夠基於給出的入棧順序達到。
實現**:
#include
#include
#include
using
namespace std;
namespace fast_io
while
(isdigit
(ch)
) x = x *10+
(ch ^48)
, ch =
getchar()
;return x * f;
}inline
void
write
(int x)
if(x >9)
write
(x /10)
;putchar
(x %10+
'0');}
};using
namespace fast_io;
intmain()
//輸出入棧順序
queue<
int>stack_out;
//乙個佇列,用來記錄出棧順序
for(
int j =
0; j < num; j++
)//初始化已經完成
for(
int k =
0; k < num; k++)}
if(stack_out.
size()
==0)cout <<
"yes"
<< endl;
//佇列規模為0表示成功
else cout <<
"no"
<< endl;
}}
c 入門之字元相關入門
先上 1 include iostream 2 include string 3 define byte char 注意,這裡沒有分號,且 只能放在函式外面.4int main 515 cout after loop ends,word is word 16 17 byte a 使用define 定...
PostgreSQL相關入門資料
postgresql相關入門資料 這個中文手冊是翻譯中的版本,因此混合了9.4和9.5的內容 如果以開發應用為主要目的,可以重點看下 i.教程 和 ii.sql 語言 postgresql 9 administration cookbook 第2版 中文版 postgresql修煉之道 從小工到專家...
eclipse除錯相關入門初級教程
首先來講一下step into step over step return的區別 step into就是單步執行,遇到子函式就進入並且繼續單步執行 f5 step over是在單步執行時,在函式內遇到子函式時不會進入子函式內單步執行,而是將子函式整個執行完再停止,也就是把子函式整個作為一步。f6 s...