這篇文章主要為大家展示了如何實現C++棧(stack)的模板類,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
1.基本概念
棧中的元素遵守“先進后出”的原則(LIFO,Last In First Out)
只能在棧頂進行插入和刪除操作
壓棧(或推入、進棧)即push,將數據放入棧頂并將棧頂指針加一
出棧(或彈出)即pop,將數據從棧頂刪除并將棧頂指針減一
棧的基本操作有:pop,push,判斷空,獲取棧頂元素,求棧大小

2.構造棧
可以使用數組構造棧,也可以使用單向鏈表構造,我覺得使用單向鏈表更加靈活方便,下面的例子我使用單向鏈表來構造棧。
單向鏈表的頭插法比較適合,鏈表頭作為棧頂:

節點的數據結構:
template<class T>
struct node
{
T value; //儲存的值
node<T>* next;
node() :next(nullptr){} //構造函數
node(T t) :value(t), next(nullptr){}
};用模板類構造一個簡單的stack類:
template<class T>
class myStack
{
int cnts; //入棧數量
node<T> *head; //棧的頭部
public:
myStack(){ cnts = 0; head = new node<T>; }
void stackPush(T arg); //入棧
T stackPop(); //出棧
T stackTop(); //獲取棧頂元素
void printStack(); //打印棧
int counts(); //獲取棧內元素個數
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;
}以上就是關于如何實現C++棧(stack)的模板類的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。