亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn)

 更新時(shí)間:2022年03月11日 10:58:21   作者:機(jī)器學(xué)習(xí)入坑者  
這篇文章主要介紹了C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn),棧(stack)是計(jì)算機(jī)中常用的一種線性數(shù)據(jù)結(jié)構(gòu),經(jīng)常有資料使用“操作受限”來(lái)形容棧,因?yàn)樗膲喝霔:蛷棾鰲2僮髦荒茉跅m斶M(jìn)行,下文更多相關(guān)資料,需要的小伙伴可以參考一下

一、棧的概念

棧的英文為stack,譯為一疊或者一摞。棧是一種采用先進(jìn)后出FILO(first in last out)或稱為后進(jìn)先出LIFO(last in first out)策略進(jìn)行元素訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)。棧經(jīng)常被比作是一摞碟子,最上面的碟子是最后放上去的,卻是最先被拿走的。

二、棧的基本組成和操作

如果要正確的使用棧,則必須保證其含有棧頂指針和棧元素。此外,棧的基本操作含有:

  • 初始化;
  • 入棧;
  • 出棧;
  • 清空棧;
  • 訪問(wèn)棧頂元素;
  • 檢測(cè)棧的狀態(tài);

其中,棧包含三種狀態(tài):棧空、一般狀態(tài)、棧滿。檢測(cè)棧滿是非常重要的步驟,防止在棧容量不能擴(kuò)充時(shí)出現(xiàn)溢出現(xiàn)象,此時(shí)稱為上溢。如果在??諘r(shí)進(jìn)行出棧操作,此時(shí)會(huì)出現(xiàn)下溢。所以在入棧和出棧時(shí),必須對(duì)棧的狀態(tài)進(jìn)行檢查。

三、棧元素的存儲(chǔ)方式

常用的實(shí)現(xiàn)方式分為兩種;

  • 第一種策略是使用靜態(tài)數(shù)組實(shí)現(xiàn),此時(shí)棧的容量是有限的;
  • 第二種策略是使用動(dòng)態(tài)數(shù)組或者鏈表,此時(shí)棧的容量可以動(dòng)態(tài)擴(kuò)充。

四、C++實(shí)現(xiàn)靜態(tài)棧

使用靜態(tài)數(shù)組實(shí)現(xiàn)棧結(jié)構(gòu)時(shí),棧底固定不變,棧頂隨著壓棧和出棧操作進(jìn)行自加和自減。一般采用整型變量來(lái)表示棧頂,壓棧時(shí)棧頂變量加一,出棧時(shí)棧頂變量減一。

(1)棧類的設(shè)計(jì)

根據(jù)前面對(duì)?;竟δ芎徒M成的描述,棧類應(yīng)該包含下述的公有函數(shù)成員和私有數(shù)據(jù)成員。其中currentSize為棧頂指針,用于壓棧、入棧、判空、判滿等操作;T表示模板參數(shù)類型,棧元素為T(mén)類型數(shù)組,可以在隱式或顯式實(shí)例化時(shí)指定;SIZE表示棧的容量,一旦確定就不能更改。

代碼如下:

template <typename T, int SIZE=10>
class Stack {
public:
?? ?bool isEmpty();
?? ?bool isFull();
?? ?void push(const T &data);
?? ?T pop();
?? ?void clear();
?? ?T getTop();
?? ?
private:
? ? // 棧頂指針
?? ?int currentSize=-1;
?? ?T array[SIZE];
};

(1)isEmpty()判斷是否為空

如果棧頂指針值為0,則表示為棧為空,代碼如下:

template<typename T, int SIZE>
bool Stack<T, SIZE>::isEmpty() {
?? ?if (currentSize == 0) {return true;}
?? ?else {return false;}
}

(2)isFull()判斷是否已滿

如果棧頂指針值等于棧的存儲(chǔ)容量SIZE時(shí),棧滿:

template<typename T, int SIZE>
bool Stack<T, SIZE>::isFull() {
?? ?if (currentSize == SIZE) {return true;}
?? ?else { return false; }
}

(3)push()壓棧

將數(shù)據(jù)壓棧時(shí),棧頂指針同步加一;

template<typename T, int SIZE>
void Stack<T, SIZE>::push(const T &data) {
?? ?// 棧頂壓入
?? ?currentSize++;
?? ?array[currentSize] = data;
}

(4)pop()出棧

將數(shù)據(jù)彈出后,棧頂指針需要減一:

template<typename T, int SIZE>
T Stack<T, SIZE>::pop() {
? ? if(currentSize>=1){return array[currentSize--];}
}

(5)getTop()獲取棧頂元素

獲取棧頂數(shù)據(jù)并不需要對(duì)棧頂指針進(jìn)行移動(dòng):

template<typename T, int SIZE>
T Stack<T, SIZE>::getTop() {
?? ?return array[currentSize];
}

(6)clear()清空棧

由于采用的是靜態(tài)數(shù)組,所以清空棧時(shí)無(wú)需進(jìn)行內(nèi)存釋放,將棧頂指針歸零即可:

template<typename T, int SIZE>
void Stack<T, SIZE>::clear() {
?? ?currentSize = -1;
}

到此這篇關(guān)于C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn)的文章就介紹到這了,更多相關(guān)C++棧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vs2022?qt環(huán)境搭建調(diào)試的方法步驟

    vs2022?qt環(huán)境搭建調(diào)試的方法步驟

    最近net6和vs2022發(fā)布,本文就詳細(xì)的介紹一下vs2022?qt環(huán)境搭建調(diào)試的方法步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C++實(shí)現(xiàn)幸運(yùn)大抽獎(jiǎng)(QT版)

    C++實(shí)現(xiàn)幸運(yùn)大抽獎(jiǎng)(QT版)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)幸運(yùn)大抽獎(jiǎng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Qt編寫(xiě)自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤(pán)

    Qt編寫(xiě)自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤(pán)

    這篇文章主要為大家詳細(xì)介紹了Qt編寫(xiě)自定義控件實(shí)現(xiàn)抽獎(jiǎng)轉(zhuǎn)盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++編程中私有和保護(hù)以及公有的類成員訪問(wèn)控制

    C++編程中私有和保護(hù)以及公有的類成員訪問(wèn)控制

    這篇文章主要介紹了C++編程中私有和保護(hù)以及公有的類成員訪問(wèn)控制,即private和protected以及public關(guān)鍵字的相關(guān)作用和用法,需要的朋友可以參考下
    2016-01-01
  • 從C語(yǔ)言過(guò)渡到C++之基本變化

    從C語(yǔ)言過(guò)渡到C++之基本變化

    在之前的C++代碼訓(xùn)練營(yíng)系列中,我試圖用完成具體項(xiàng)目的方式給大家介紹C++,但后來(lái)大家反饋說(shuō)這樣從C過(guò)渡到C++有點(diǎn)跟不上。于是我又專門(mén)設(shè)計(jì)了這個(gè)《從C到C++》的過(guò)渡專題,我準(zhǔn)備通過(guò)10篇文章介紹一下C++和C的重要區(qū)別。
    2017-07-07
  • C++ Opencv自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理技巧

    C++ Opencv自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理技巧

    這篇文章主要介紹了C++ Opencv 自寫(xiě)函數(shù)實(shí)現(xiàn)膨脹腐蝕處理,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • C語(yǔ)言哈希表概念超詳細(xì)講解

    C語(yǔ)言哈希表概念超詳細(xì)講解

    哈希是一種很高效的存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu),它是利用的一種映射關(guān)系,它也是STL中unordered_map和unordered_set?的底層結(jié)構(gòu)。本文,主要講解哈希的原理,哈希的實(shí)現(xiàn),里面關(guān)鍵點(diǎn)在于如何解決哈希沖突
    2023-02-02
  • C++使用redis的實(shí)例詳解

    C++使用redis的實(shí)例詳解

    這篇文章主要介紹了C++使用redis的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++實(shí)現(xiàn)基于時(shí)序公平的讀寫(xiě)鎖詳解

    C++實(shí)現(xiàn)基于時(shí)序公平的讀寫(xiě)鎖詳解

    讀寫(xiě)鎖與普通的互斥鎖的區(qū)別在于有兩種上鎖方式:讀鎖和寫(xiě)鎖,不用的用戶對(duì)同一個(gè)讀寫(xiě)鎖獲取讀鎖是非互斥的,其他情況則是互斥的,本文小編將給大家詳細(xì)介紹C++實(shí)現(xiàn)基于時(shí)序公平的讀寫(xiě)鎖,需要的朋友可以參考下
    2023-10-10
  • C++如何獲取當(dāng)前系統(tǒng)時(shí)間及格式化輸出

    C++如何獲取當(dāng)前系統(tǒng)時(shí)間及格式化輸出

    這篇文章主要介紹了C++如何獲取當(dāng)前系統(tǒng)時(shí)間及格式化輸出的實(shí)例代碼,主要用到time()及strftime()函數(shù),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論