欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++Stack棧類模版實例詳解

 更新時間:2022年02月25日 16:09:06   作者:諾謙  
這篇文章主要為大家詳細介紹了C++Stack棧類模版實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.棧的介紹

棧的實現(xiàn)方式分為3

  • 基于靜態(tài)數(shù)組實現(xiàn),內(nèi)部預設一個很大的數(shù)組對象, 實現(xiàn)簡單,缺點是空間受限。
  • 基于動態(tài)數(shù)組實現(xiàn),內(nèi)部預設一個容量值,然后分配一段內(nèi)存空間數(shù)組,如果入棧大于默認容量值時,則再次擴大分配新的內(nèi)存數(shù)組,并將舊數(shù)組拷貝至新數(shù)組及釋放舊數(shù)組.
  • 基于雙向循環(huán)鏈表實現(xiàn)

棧的函數(shù)需要實現(xiàn)如下所示:

  • T pop() : 出棧并返回棧頂元素
  • void  push(const T &t) : 入棧 
  • const T & top() const : 獲取const類型棧頂元素
  • T &top() : 獲取棧頂元素
  • int length() const: 獲取數(shù)量(父類已經(jīng)實現(xiàn))void clear(): 清空棧(父類已經(jīng)實現(xiàn))

本章,我們實現(xiàn)的?;趧討B(tài)數(shù)組實現(xiàn),它的父類是我們之前實現(xiàn)的Vector類:

C++ 動態(tài)數(shù)組模版類Vector實例詳解

所以代碼實現(xiàn)會非常簡單.

2.棧實現(xiàn)

代碼如下所示:

#ifndef Stack_H
#define Stack_H
#include "throw.h"
// throw.h里面定義了一個ThrowException拋異常的宏,如下所示:
//#include <iostream>
//using namespace std;
//#define ThrowException(errMsg)  {cout<<__FILE__<<" LINE"<<__LINE__<<": "<<errMsg<<endl; (throw errMsg);}
#include "Vector.h"
template<class T>
class Stack : public Vector<T>
{
public:
    T pop()
    {
        if(Vector<T>::isEmpty()) {        // 如果棧為空,則拋異常
            ThrowException("Stack is empty ...");
        }
        T t = Vector<T>::data()[Vector<T>::length() - 1];
        Vector<T>::resize(Vector<T>::length() - 1);
        return  t;
    }
    // 入棧,實際就是append尾部添加成員
    void push(const T &t)
    {
        Vector<T>::append(t);
    }
    T &top()
    {
        if(Vector<T>::isEmpty()) {
            ThrowException("Stack is empty ...");
        }
        return Vector<T>::data()[Vector<T>::length() - 1];
    }
    const T &top() const
    {
        if(Vector<T>::isEmpty()) {
            ThrowException("Stack is empty ...");
        }
        return Vector<T>::data()[Vector<T>::length() - 1];
    }
};
#endif // Stack_H

3.代碼測試

int main(int argc, char *argv[])
{
    Stack<int> stack;
    cout<<"******* current length:"<<stack.length()<<endl;
    for(int i = 0; i < 5; i++) {
        cout<<"stack.push:"<<i<<endl;
        stack.push(i);
    }
    cout<<"******* current length:"<<stack.length()<<endl;
    while(!stack.isEmpty()) {
        cout<<"stack.pop:"<<stack.pop()<<endl;
    }
    return 0;
}

運行打印:

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • 淺談C++中char型變量的地址輸出

    淺談C++中char型變量的地址輸出

    下面小編就為大家?guī)硪黄獪\談C++中char 型變量的地址輸出。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • C++ 先對數(shù)組排序,在進行折半查找

    C++ 先對數(shù)組排序,在進行折半查找

    以下小編就為大家介紹兩種實現(xiàn)方法。第一種方法是,選擇排序法+循環(huán)折半查找法。第二種方法是,冒泡排序法+遞歸折半查找法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C語言題目:有多少張桌子--并查集

    C語言題目:有多少張桌子--并查集

    并查集是一種用于管理分組的數(shù)據(jù)結構。它具備兩個操作:(1)查詢元素a和元素b是否為同一組 (2) 將元素a和b合并為同一組,需要的朋友可以參考下
    2021-09-09
  • C語言利用面試真題理解指針的使用

    C語言利用面試真題理解指針的使用

    C語言這門課程在計算機的基礎教學中一直占有比較重要的地位,然而要想突破C語言的學習,對指針的掌握是非常重要的,本文將具體針對指針的基礎做詳盡的介紹
    2022-08-08
  • VSCode配置C/C++環(huán)境的最新詳細教程

    VSCode配置C/C++環(huán)境的最新詳細教程

    VisualStudioCode(簡稱VSCode)是Microsoft開發(fā)的代碼編輯器,它支持Windows,Linux和macOS等操作系統(tǒng)以及開源代碼,下面這篇文章主要給大家介紹了關于VSCode配置C/C++環(huán)境的最新詳細教程,需要的朋友可以參考下
    2022-12-12
  • C++刪除指定文件夾下N天及之前日志文件的方法

    C++刪除指定文件夾下N天及之前日志文件的方法

    這篇文章主要介紹了C++刪除指定文件夾下N天及之前日志文件的方法,涉及C++針對時間判斷及文件操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C語言的數(shù)據(jù)變量、常量、數(shù)據(jù)類型及使用示例詳解

    C語言的數(shù)據(jù)變量、常量、數(shù)據(jù)類型及使用示例詳解

    本文介紹了C語言中的變量、常量、數(shù)據(jù)類型關鍵字以及如何使用這些數(shù)據(jù)類型,主要內(nèi)容包括變量和常量的定義與使用、基本數(shù)據(jù)類型關鍵字,感興趣的朋友一起看看吧
    2025-03-03
  • C++ CTreeview的checkbox使用方法

    C++ CTreeview的checkbox使用方法

    這篇文章主要介紹了C++ CTreeview的checkbox使用方法的相關資料,需要的朋友可以參考下
    2015-06-06
  • 講解C++編程中Address-of運算符&的作用及用法

    講解C++編程中Address-of運算符&的作用及用法

    這篇文章主要介紹了C++編程中Address-of運算符&的作用及用法,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2016-01-01
  • Qt中JSON使用的詳細步驟

    Qt中JSON使用的詳細步驟

    本文主要介紹了Qt中JSON使用的詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08

最新評論