C++棧(stack)的模板類實現(xiàn)代碼
本文實例為大家分享了C++棧(stack)的模板類實現(xiàn)代碼,供大家參考,具體內容如下
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(); //獲取棧內元素個數(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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
OpenCV實現(xiàn)區(qū)域分割和區(qū)域生長
區(qū)域分割是圖像處理中一個重要的任務,本文主要介紹了OpenCV實現(xiàn)區(qū)域分割和區(qū)域生長,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02
C++ CryptoPP使用AES實現(xiàn)加解密詳解
Crypto++ (CryptoPP) 是一個用于密碼學和加密的 C++ 庫,提供了大量的密碼學算法和功能,這篇文章主要為大家介紹了C++ CryptoPP如何使用AES實現(xiàn)加解密,需要的可以參考下2023-11-11
C++ virtual destructor虛擬析構函數(shù)
C++中基類采用virtual虛析構函數(shù)是為了防止內存泄漏。具體地說,如果派生類中申請了內存空間,并在其析構函數(shù)中對這些內存空間進行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構函數(shù)的相關知識,感興趣的朋友一起看看吧2021-05-05

