這篇文章主要為大家展示了如何實現C++棧(stack)的模板類,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
創(chuàng)新互聯于2013年成立,先為睢縣等服務建站,睢縣等地企業(yè),進行企業(yè)商務咨詢服務。為睢縣企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
1.基本概念
棧中的元素遵守“先進后出”的原則(LIFO,Last In First Out)
只能在棧頂進行插入和刪除操作
壓棧(或推入、進棧)即push,將數據放入棧頂并將棧頂指針加一
出棧(或彈出)即pop,將數據從棧頂刪除并將棧頂指針減一
棧的基本操作有:pop,push,判斷空,獲取棧頂元素,求棧大小
2.構造棧
可以使用數組構造棧,也可以使用單向鏈表構造,我覺得使用單向鏈表更加靈活方便,下面的例子我使用單向鏈表來構造棧。
單向鏈表的頭插法比較適合,鏈表頭作為棧頂:
節(jié)點的數據結構:
templatestruct node { T value; //儲存的值 node * next; node() :next(nullptr){} //構造函數 node(T t) :value(t), next(nullptr){} };
用模板類構造一個簡單的stack類:
templateclass myStack { int cnts; //入棧數量 node *head; //棧的頭部 public: myStack(){ cnts = 0; head = new node ; } void stackPush(T arg); //入棧 T stackPop(); //出棧 T stackTop(); //獲取棧頂元素 void printStack(); //打印棧 int counts(); //獲取棧內元素個數 bool isEmpty(); //判斷空 }; template void myStack ::stackPush(T arg) { node *pnode = new node (arg); //申請入棧元素的空間 pnode->next = head->next; head->next = pnode; cnts++; } template T myStack ::stackPop() { if (head->next!=nullptr) { node * temp = head->next; head->next = head->next->next; T popVal = temp->value; delete temp; return popVal; } } template T myStack ::stackTop() { if (head->next!=nullptr) { return head->next->value; } } template void myStack ::printStack() { if (head->next != nullptr) { node * temp = head; while (temp->next != nullptr) { temp = temp->next; cout << temp->value << endl; } } } template int myStack ::counts() { return cnts; } template bool myStack ::isEmpty() { if (cnts) return false; else return true; }
以上就是關于如何實現C++棧(stack)的模板類的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。