1. 再談棧
回顧一下之前所學(xué)的棧,棧是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),而實(shí)現(xiàn)方式需要?jiǎng)?chuàng)建多個(gè)結(jié)構(gòu)體,通過(guò)鏈?zhǔn)降姆绞竭M(jìn)行實(shí)現(xiàn),這是標(biāo)準(zhǔn)的棧的思路,而在STL中??梢砸愿鼮楹?jiǎn)單的方式實(shí)現(xiàn)。
2. 頭文件
頭文件 #include<stack>
3. 初始化
格式為:explicit stack (const container_type& ctnr = container_type());
我們以int類型作為參數(shù)為例進(jìn)行創(chuàng)建,其創(chuàng)建方法與vector無(wú)異
stack<int> s; stack<int> v(s);
標(biāo)準(zhǔn)的棧創(chuàng)建方法是直接創(chuàng)建空棧,由于棧的特殊性質(zhì),讓他擁有其他容器的參數(shù)可以這樣創(chuàng)建,這種多參數(shù)的方式可能有一些復(fù)雜,一般也很少這樣使用。
vector<int> v(3,100); stack<int,vector<int> > s(v); //注意,> >符號(hào)之間需要有一個(gè)空格隔開(kāi)
通過(guò)標(biāo)準(zhǔn)的方式創(chuàng)建向量數(shù)組,然后通過(guò)復(fù)制構(gòu)造函數(shù)的方式進(jìn)行創(chuàng)建,其內(nèi)容就是vector數(shù)組的全部?jī)?nèi)容。
4. 迭代器
棧和隊(duì)列都屬于一種特殊的數(shù)據(jù)結(jié)構(gòu),只能通過(guò)訪問(wèn)頂層數(shù)據(jù)并不斷剔除數(shù)據(jù)的方法進(jìn)行全部訪問(wèn),因此沒(méi)有直接的迭代器。
5. 常用接口
我們使用stack<int> s 預(yù)先創(chuàng)建了一個(gè)棧,命名為s,方便舉例
a)大小size()
返回棧元素的個(gè)數(shù)
函數(shù)原型:size_type size() const;
cout<<s.size()<<endl; //直接返回棧中元素的個(gè)數(shù)
b) 返回棧頂元素top()
返回棧頂元素內(nèi)容
函數(shù)原型:
reference& top();
const_reference& top() const;
cout<<s.top()<<endl; //直接返回輸出即可 s.top()+=100; //也可以直接對(duì)棧定元素進(jìn)行修改操作
c) 入棧push()
往棧頂中插入一個(gè)元素。
函數(shù)原型: void push (const value_type& val);
d)出棧pop()
將棧頂元素釋放,注意pop()函數(shù)是沒(méi)有返回值的,如果要想訪問(wèn)后刪除需要先top再pop使用。
函數(shù)原型:void pop();
s.pop();
e) 判空empty()
返回一個(gè)bool類型的值,只存在真和假,當(dāng)棧為空時(shí)為真,不為空時(shí)為假
函數(shù)原型
bool empty() const;
可以利用判空的函數(shù)進(jìn)行元素訪問(wèn)的操作,這里建議先使用初始化函數(shù)將棧進(jìn)行復(fù)制,否則遍歷之后棧s就為空了。
while(!s.empty()){ cout<<s.top()<<endl; s.pop(); }
6. 推薦配套作業(yè)
我們可以把棧相關(guān)的題目再度拿出來(lái)做一下,看一下使用STL可以怎么樣進(jìn)行簡(jiǎn)化。
請(qǐng)使用STL的方法完成進(jìn)制轉(zhuǎn)換題目。
[第三章-棧的內(nèi)容]
可以嘗試的去利用棧的思維實(shí)現(xiàn)一下進(jìn)制轉(zhuǎn)換的題目
如十進(jìn)制到八進(jìn)制:1055題
十進(jìn)制到二進(jìn)制:1192題
或者可以嘗試一下利用遞歸棧的方式,將棧去代替函數(shù)遞歸實(shí)現(xiàn)一些功能(注意,這將會(huì)是DFS搜索算法的理解基礎(chǔ))
如斐波那契數(shù)列:1131題
1055 | 二級(jí)C語(yǔ)言-進(jìn)制轉(zhuǎn)換 |
1131 | C語(yǔ)言訓(xùn)練-斐波納契數(shù)列 |
1192 | 十->二進(jìn)制轉(zhuǎn)換 |
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程