真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

如何實現C++棧(stack)的模板類

這篇文章主要為大家展示了如何實現C++棧(stack)的模板類,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

創(chuàng)新互聯于2013年成立,先為睢縣等服務建站,睢縣等地企業(yè),進行企業(yè)商務咨詢服務。為睢縣企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

1.基本概念

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

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

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

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

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

如何實現C++棧(stack)的模板類

2.構造棧

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

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

如何實現C++棧(stack)的模板類

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

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

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

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

template
class 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)的模板類的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。


當前名稱:如何實現C++棧(stack)的模板類
標題鏈接:http://weahome.cn/article/jihhgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部