日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++Stack棧類模版實例詳解_C 語言

作者:諾謙 ? 更新時間: 2022-04-28 編程語言

1.棧的介紹

棧的實現方式分為3

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

棧的函數需要實現如下所示:

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

本章,我們實現的棧基于動態數組實現,它的父類是我們之前實現的Vector類:

C++?動態數組模版類Vector實例詳解

所以代碼實現會非常簡單.

2.棧實現

代碼如下所示:

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

3.代碼測試

int main(int argc, char *argv[])
{
    Stack stack;
    cout<<"******* current length:"<

運行打印:

總結

原文鏈接:https://blog.csdn.net/qq_37997682/article/details/123123143

欄目分類
最近更新