數(shù)據(jù)結(jié)構(gòu)——棧:基礎(chǔ)-創(chuàng)新互聯(lián)

前言

在之前的學(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é)


一、棧(stack)是什么?

棧作為一種數(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)性嘛),這就是“先入后出”。?


二、C++對(duì)棧的定義和使用方法 2.1 引入頭文件:
#include
2.2 stack容器適配器的創(chuàng)建?
  • 創(chuàng)建一個(gè)不包含任何元素的 stack 適配器,并采用默認(rèn)的 deque 基礎(chǔ)容器:
std::stack values;
  • 可以通過指定第二個(gè)模板類型參數(shù),使用除 deque 容器外的其它序列式容器。通常情況下stack容器適配器可以適配vector、deque和list這三個(gè)容器。
std::stack>values;
  • 可以用一個(gè)基礎(chǔ)容器來初始化 stack 適配器,只要該容器的類型和 stack 底層使用的基礎(chǔ)容器類型相同即可
std::listvalues {1, 2, 3};
std::stack>my_stack (values);
  • 還可以用一個(gè) stack 適配器來初始化另一個(gè) stack 適配器,只要它們存儲(chǔ)的元素類型以及底層采用的基礎(chǔ)容器類型相同即可。
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ù)


三、用棧處理的題目 3.1 有效括號(hào)序列

題目描述:

給出一個(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;
}

總結(jié)

在這篇文章中,小荔枝主要是整理了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)