最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年03月11日 10:58:21   作者:機器學習入坑者  
這篇文章主要介紹了C++實現(xiàn)棧與分析棧的知識點,棧(stack)是計算機中常用的一種線性數(shù)據(jù)結(jié)構(gòu),經(jīng)常有資料使用“操作受限”來形容棧,因為它的壓入棧和彈出棧操作只能在棧頂進行,下文更多相關(guān)資料,需要的小伙伴可以參考一下

一、棧的概念

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

二、棧的基本組成和操作

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

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

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

三、棧元素的存儲方式

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

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

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

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

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

根據(jù)前面對?;竟δ芎徒M成的描述,棧類應(yīng)該包含下述的公有函數(shù)成員和私有數(shù)據(jù)成員。其中currentSize為棧頂指針,用于壓棧、入棧、判空、判滿等操作;T表示模板參數(shù)類型,棧元素為T類型數(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()判斷是否已滿

如果棧頂指針值等于棧的存儲容量SIZE時,棧滿:

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

(3)push()壓棧

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

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ù)并不需要對棧頂指針進行移動:

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

(6)clear()清空棧

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

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

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

相關(guān)文章

  • C++內(nèi)存四區(qū)之代碼區(qū)、全局區(qū)、棧區(qū)和堆區(qū)

    C++內(nèi)存四區(qū)之代碼區(qū)、全局區(qū)、棧區(qū)和堆區(qū)

    C++編譯器會把代碼直接分為四個小區(qū),弄懂這四小區(qū)對我們理解內(nèi)存有所幫助,所以下面這篇文章主要給大家介紹了關(guān)于C++內(nèi)存四區(qū)之代碼區(qū)、全局區(qū)、棧區(qū)和堆區(qū)的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • c語言:基于函數(shù)指針的兩個示例分析

    c語言:基于函數(shù)指針的兩個示例分析

    本篇文章是對c語言中函數(shù)指針的兩個示例做了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 基于C++泛型編程職工管理系統(tǒng)

    基于C++泛型編程職工管理系統(tǒng)

    這篇文章主要介紹了基于C++泛型編程職工管理系統(tǒng),前面介紹到了C++的泛型編程,并實現(xiàn)了萬能容器,不過那使用的是數(shù)組,今天呢咱帶大家實踐一下使用泛型技術(shù),結(jié)合單鏈表實現(xiàn)一個職工管理系統(tǒng),需要的朋友可以參考一下
    2022-02-02
  • C++類中如何使用定義的類型別名

    C++類中如何使用定義的類型別名

    這篇文章主要介紹了C++類中如何使用定義的類型別名,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言指針詳解之野指針

    C語言指針詳解之野指針

    這篇文章主要為大家介紹了C語言野指針,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • C++ CryptoPP使用AES實現(xiàn)加解密詳解

    C++ CryptoPP使用AES實現(xiàn)加解密詳解

    Crypto++ (CryptoPP) 是一個用于密碼學和加密的 C++ 庫,提供了大量的密碼學算法和功能,這篇文章主要為大家介紹了C++ CryptoPP如何使用AES實現(xiàn)加解密,需要的可以參考下
    2023-11-11
  • C++使用動態(tài)內(nèi)存分配的原因解說

    C++使用動態(tài)內(nèi)存分配的原因解說

    這篇文章主要介紹了C++使用動態(tài)內(nèi)存分配的原因解說,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C++獲取數(shù)組大小和多維數(shù)組操作詳解

    C++獲取數(shù)組大小和多維數(shù)組操作詳解

    這篇文章主要介紹了C++獲取數(shù)組大小和多維數(shù)組的操作,文中通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • C++判斷子序列題目詳解

    C++判斷子序列題目詳解

    這篇文章主要為大家介紹了C++判斷子序列題目,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Qt禁止程序多開的實現(xiàn)示例

    Qt禁止程序多開的實現(xiàn)示例

    本文主要介紹了Qt 禁止程序多開的實現(xiàn)示例,主要介紹了三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09

最新評論

永康市| 启东市| 博乐市| 磐石市| 陆丰市| 弥渡县| 宜川县| 马山县| 凤台县| 鄂伦春自治旗| 盘锦市| 英德市| 福建省| 修水县| 凤山市| 南昌市| 汝阳县| 米林县| 桂阳县| 江孜县| 逊克县| 井研县| 永城市| 文安县| 天柱县| 阜平县| 桃江县| 武乡县| 铜梁县| 家居| 张家界市| 邯郸市| 乐清市| 沈丘县| 城步| 北宁市| 富源县| 镇沅| 高雄县| 达尔| 枞阳县|