在之前的學(xué)習(xí)中,小荔枝沒有系統(tǒng)的學(xué)過數(shù)據(jù)結(jié)構(gòu)噢,所以自己感覺還是欠缺了很多。如果想要走遠(yuǎn)點(diǎn)而不是浮于表面,學(xué)好數(shù)據(jù)結(jié)構(gòu)和算法真的很重要吶。從今天開始,小荔枝要開始學(xué)習(xí)和整理算法知識(shí)了,打算整理后寫一個(gè)系列的文章當(dāng)我的學(xué)習(xí)筆記了,有需要的小伙伴自取噢~~~
創(chuàng)新互聯(lián)公司網(wǎng)絡(luò)公司擁有十載的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),1000多家客戶的共同信賴。提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站開發(fā)、網(wǎng)站定制、買友情鏈接、建網(wǎng)站、網(wǎng)站搭建、成都響應(yīng)式網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)目錄
前言
一、棧(stack)是什么?
二、C++對(duì)棧的定義和使用方法
2.1 引入頭文件:
2.2 stack容器適配器的創(chuàng)建?
2.3 stack容器適配器支持的成員函數(shù)
三、用棧處理的題目
3.1 有效括號(hào)序列
3.2 棧模板?
總結(jié)
棧作為一種數(shù)據(jù)結(jié)構(gòu),規(guī)定只能在一端執(zhí)行插入和彈出的操作,它是一種只能在一端進(jìn)行插入和刪除操作的特殊線性表,這一端通常被稱為棧頂,另一端被稱為棧底,遵循“先入后出”的原則進(jìn)行存儲(chǔ)。通俗一點(diǎn)地去理解“先入后出”:其實(shí)棧就相當(dāng)于一個(gè)竹筒,一端封底,另一端開口。當(dāng)你需要插入或者取出某個(gè)元素時(shí),就像是在竹筒中加水,你只能從竹筒頂端往里面注水、從竹筒的頂端往外倒水。而先進(jìn)去的水往往最后出來(這里先忽略流動(dòng)性嘛),這就是“先入后出”。?
#include
2.2 stack容器適配器的創(chuàng)建?std::stack values;
std::stack>values;
std::listvalues {1, 2, 3};
std::stack>my_stack (values);
std::listvalues{ 1, 2, 3 };
std::stack>my_stack1(values);
std::stack>my_stack=my_stack1;
//std::stack>my_stack(my_stack1);
2.3 stack容器適配器支持的成員函數(shù)題目描述:
給出一個(gè)僅包含字符'(',')','{','}','['和']',的字符串,判斷給出的字符串是否是合法的括號(hào)序列括號(hào)必須以正確的順序關(guān)閉,"()"和"()[]{}"都是合法的括號(hào)序列,但"(]"和"([)]"不合法。
解題思路:
遍歷字符串,將字符串中的‘(’、‘[’、'{'進(jìn)行入棧操作,當(dāng)遇到‘)’、‘]’、‘}’的時(shí)候檢查棧是否為空或者棧定元素是否匹配,如果是就返回true;不是就返回false。
核心代碼:
bool isValid(string s) {
// write code here
stackstk;
for(int i=0;i
在這里你會(huì)發(fā)現(xiàn)有些實(shí)例跑不過,其實(shí)這里是因?yàn)椤畖|’這個(gè)運(yùn)算符只有在左邊條件為false的時(shí)候才會(huì)判斷右邊的條件的正確與失誤。
所以代碼應(yīng)該改一下:
bool isValid(string s) {
// write code here
stackstk;
for(int i=0;i
這里還有另一個(gè)思路:其實(shí)可以將右括號(hào)進(jìn)行入棧的操作,代碼會(huì)相對(duì)比較簡(jiǎn)潔一點(diǎn)。
bool isValid(string s) {
// write code here
stackstk;
for(int i=0;i
3.2 棧模板?題目描述:
描述
請(qǐng)你實(shí)現(xiàn)一個(gè)棧。
操作:
push x:將 加x\x?入棧,保證?x\x?為 int 型整數(shù)。
pop:輸出棧頂,并讓棧頂出棧
top:輸出棧頂,棧頂不出棧
輸入描述:
第一行為一個(gè)正整數(shù)?n\n?,代表操作次數(shù)。(1 \leq n \leq 100000)(1≤n≤100000)
接下來的?n\n?,每行為一個(gè)字符串,代表一個(gè)操作。保證操作是題目描述中三種中的一種。
輸出描述:
如果操作為push,則不輸出任何東西。
如果為另外兩種,若棧為空,則輸出 "error“
否則按對(duì)應(yīng)操作輸出。
示例1
輸入:
6 push 1 pop top push 2 push 3 pop輸出:
1 error 3
利用C++的數(shù)組或者是vector容器來實(shí)現(xiàn)棧的操作,我這里給出的是使用vector容器來寫的思路:
#include#includeusing namespace std;
class M_stack{
private:
vectors;
vector::reverse_iterator i;
public:
void push(int x){
s.push_back(x);
}
void pop(){
i=s.rbegin();
if(s.size()>0){
cout<<*i<0){
i = s.rbegin();
cout<<*i<>n;
for(int i=0;i>order;
if(order=="push"){
int inputs;
cin>>inputs;
s.push(inputs);
}else if(order=="pop"){
s.pop();
}else if(order=="top"){
s.top();
}
}
return 0;
}
在這篇文章中,小荔枝主要是整理了C++STL庫(kù)中有關(guān)棧的操作,同時(shí)小荔枝也給出了棧的個(gè)人理解和用vector向量容器寫的一個(gè)棧,總之其實(shí)棧并不難,學(xué)會(huì)靈活運(yùn)用才是最重要的哈哈哈。這篇文章我其實(shí)拖了一個(gè)多月才騰出手寫個(gè)結(jié)尾,夜深咯,該休息啦,明天再努力哈哈哈。
今朝已然成為過去,明日依然向往未來!我是小荔枝,在技術(shù)成長(zhǎng)的路上與你相伴,碼文不易,麻煩舉起小爪爪點(diǎn)個(gè)贊吧哈哈哈。
謝謝大家的支持嘻嘻嘻~~~?
比心心?~~~
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享標(biāo)題:數(shù)據(jù)結(jié)構(gòu)——棧:基礎(chǔ)-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://muchs.cn/article38/iocpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)站營(yíng)銷、網(wǎng)站制作、電子商務(wù)、建站公司、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容