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

C++棧(stack)的模板類實現(xiàn)代碼

 更新時間:2020年04月27日 14:37:22   作者:whlook  
這篇文章主要為大家詳細介紹了C++棧(stack)的模板類實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++棧(stack)的模板類實現(xiàn)代碼,供大家參考,具體內(nèi)容如下

1.基本概念

  棧中的元素遵守“先進后出”的原則(LIFO,Last In First Out)

  只能在棧頂進行插入和刪除操作

  壓棧(或推入、進棧)即push,將數(shù)據(jù)放入棧頂并將棧頂指針加一

  出棧(或彈出)即pop,將數(shù)據(jù)從棧頂刪除并將棧頂指針減一

  棧的基本操作有:pop,push,判斷空,獲取棧頂元素,求棧大小

2.構造棧

可以使用數(shù)組構造棧,也可以使用單向鏈表構造,我覺得使用單向鏈表更加靈活方便,下面的例子我使用單向鏈表來構造棧。

單向鏈表的頭插法比較適合,鏈表頭作為棧頂:

節(jié)點的數(shù)據(jù)結構:

template<class T>
struct node
{
 T value; //儲存的值
 node<T>* next; 

 node() :next(nullptr){} //構造函數(shù)
 node(T t) :value(t), next(nullptr){}
};

用模板類構造一個簡單的stack類:

template<class T>
class myStack
{
 int cnts; //入棧數(shù)量
 node<T> *head; //棧的頭部
public:

 myStack(){ cnts = 0; head = new node<T>; }
 void stackPush(T arg); //入棧
 T stackPop(); //出棧
 T stackTop(); //獲取棧頂元素

 void printStack(); //打印棧
 int counts(); //獲取棧內(nèi)元素個數(shù)
 bool isEmpty(); //判斷空
};
template<class T>
void myStack<T>::stackPush(T arg)
{
 node<T> *pnode = new node<T>(arg); //申請入棧元素的空間
 pnode->next = head->next;
 head->next = pnode;
 cnts++;
}
template<class T>
T myStack<T>::stackPop()
{
 if (head->next!=nullptr) 
 {
  node<T>* temp = head->next;
  head->next = head->next->next;
  T popVal = temp->value;
  delete temp;
  return popVal;
 }
}
template<class T>
T myStack<T>::stackTop()
{
 if (head->next!=nullptr)
 {
  return head->next->value;
 }
}
template<class T>
void myStack<T>::printStack()
{
 if (head->next != nullptr)
 {
  node<T>* temp = head;
  while (temp->next != nullptr)
  {
   temp = temp->next;
   cout << temp->value << endl;
  }
 }
}
template<class T>
int myStack<T>::counts()
{
 return cnts;
}
template<class T>
bool myStack<T>::isEmpty()
{
 if (cnts)
  return false;
 else
  return true;
}

GitHub:https://github.com/whlook/stackTemplate

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • OpenCV實現(xiàn)區(qū)域分割和區(qū)域生長

    OpenCV實現(xiàn)區(qū)域分割和區(qū)域生長

    區(qū)域分割是圖像處理中一個重要的任務,本文主要介紹了OpenCV實現(xiàn)區(qū)域分割和區(qū)域生長,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • C++中的Primer拷貝、賦值與銷毀詳解

    C++中的Primer拷貝、賦值與銷毀詳解

    這篇文章主要介紹了C++中的Primer拷貝、賦值與銷毀方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • C++ CryptoPP使用AES實現(xiàn)加解密詳解

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

    Crypto++ (CryptoPP) 是一個用于密碼學和加密的 C++ 庫,提供了大量的密碼學算法和功能,這篇文章主要為大家介紹了C++ CryptoPP如何使用AES實現(xiàn)加解密,需要的可以參考下
    2023-11-11
  • c++連接mysql5.6的出錯問題總結

    c++連接mysql5.6的出錯問題總結

    下面小編就為大家?guī)硪黄猚++連接mysql5.6的出錯問題總結。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-12-12
  • C++泛型模板約束深入講解

    C++泛型模板約束深入講解

    C/C++ 作為 C# 語言的前置版本,ECMA工業(yè)化編程語言,自然是存在 “泛型模板約束” 的功能的,只是本文不以 C/C++ 20 新語法搞出來的 “requires” 關鍵字來實現(xiàn),它很難用
    2022-09-09
  • C++類型轉換的深入總結

    C++類型轉換的深入總結

    這篇文章主要給大家介紹了關于C++類型轉換的深入總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • C++ virtual destructor虛擬析構函數(shù)

    C++ virtual destructor虛擬析構函數(shù)

    C++中基類采用virtual虛析構函數(shù)是為了防止內(nèi)存泄漏。具體地說,如果派生類中申請了內(nèi)存空間,并在其析構函數(shù)中對這些內(nèi)存空間進行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構函數(shù)的相關知識,感興趣的朋友一起看看吧
    2021-05-05
  • C語言文件打開的模式

    C語言文件打開的模式

    這篇文章主要介紹了C語言文件打開的模式,以及相關的原理和知識點做了分享,有興趣的朋友參考學習下。
    2018-03-03
  • C++實現(xiàn)Huffman的編解碼

    C++實現(xiàn)Huffman的編解碼

    這篇文章主要為大家詳細介紹了C++實現(xiàn)Huffman的編解碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 詳解C++虛函數(shù)的工作原理

    詳解C++虛函數(shù)的工作原理

    這篇文章主要介紹了C++虛函數(shù)的工作原理的的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06

最新評論