国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言利用模板實現簡單的棧類

2020-01-26 13:35:26
字體:
來源:轉載
供稿:網友

本文實例為大家分享了C語言利用模板實現簡單的棧類(數組和單鏈表),供大家參考,具體內容如下

主要的功能是實現一個后進先出的列表,有入棧、出棧、返回大小、判空等基本功能

#pragma onceusing namespace std;const int MAXSIZE = 0xfff;template<class type>class Class_Linkstack{  int top;  type* my_s;  int max_size;public:  Class_Linkstack() :top(-1), max_size(MAXSIZE)  {    my_s = new type[max_size];     if (my_s == NULL)    {      cerr << "動態存儲分配失??!" << endl;      exit(1);    }  }  Class_Linkstack(int size) :top(-1), max_size(size)  {    my_s = new type[size];    if (my_s == NULL)    {      cerr << "動態存儲分配失敗!" << endl;      exit(1);    }  }  ~Class_Linkstack() { delete[] my_s; }  bool Empty_Linkstack();  void Push_Linkstack(type tp);  void Pop_Linkstack();  type Top_Linkstack();  int Size_Linkstack();    void Print_Linkstack();};template<class type>void Class_Linkstack<type>::Print_Linkstack(){  if (top == -1)    cout << "空棧" << endl;  else  {    for (int i = 0; i < top+1; i++)      cout << my_s[i] << '/t';  }}template<class type>bool Class_Linkstack<type>::Empty_Linkstack(){  if (top == -1)    return true;  else  {    return false;  }}template<class type>void Class_Linkstack<type>::Push_Linkstack(type tp){  if (top + 1 < max_size)    my_s[++top] = tp;  else  {    cout << "棧已滿" << endl;    exit(1);  }}template<class type>void Class_Linkstack<type>::Pop_Linkstack(){  if (top == -1)  {    cout << "為空棧" << endl;    exit(1);  }  else  {    my_s[top--] = 0;  }}template<class type>type Class_Linkstack<type>::Top_Linkstack(){  if (top != -1)    return my_s[top];  else  {    cout << "為空棧" << endl;    exit(1);  }}template<class type>int Class_Linkstack<type>::Size_Linkstack(){  return top + 1;}

測試代碼

#include "Class_Linkstack.h"int main(){  Class_Linkstack<int> sk1(5);  for (int i = 0; i < 5;i++ )    sk1.Push_Linkstack(i * 2 + 1);  sk1.Print_Linkstack();   system("pause");  return 0;}

補充(通過單鏈表實現)

上面是通過數組來實現,與數組相比,鏈表實現更靈活,更容易增刪元素。
單鏈表實現的核心思想是不斷更新棧頂指針,來實現出棧壓棧,每一個節點是一個結構體,包含一個value和一個next指針指向下一個元素,初始化時將棧頂指針置為NULL。

#pragma onceusing namespace std;template<class type>struct listnode{  type value;  listnode* next;  listnode(type v,listnode* p):value(v),next(p){ }};template<class type>class List_stack{  listnode<type>* top;  int size = 0;public:  List_stack();  void Push(type &tp);  void Pop();  bool Empty();  int Size();  void Print();  ~List_stack()  {    while (top)    {      listnode<type> * p = top;      top = top->next;      delete p;    }  }};template<class type>bool List_stack<type>::Empty(){  if (top == NULL)    return true;  else  {    return false;  }}template<class type>List_stack<type>::List_stack(){  top = NULL;  size = 0;}template<class type>void List_stack<type>::Push(type &tp){  listnode<type> *tmp=new listnode<type>(tp,top);  top = tmp;  size++;}template<class type>void List_stack<type>::Pop(){  if (top == NULL)  {    cout << "為空棧" << endl;  }  else  {    top = top->next;    size--;  }}template<class type>int List_stack<type>::Size(){  return size;}template<class type>void List_stack<type>::Print(){  listnode<type>* tmp = top;  while (tmp != NULL)  {    cout << tmp->value << '/t';    tmp = tmp->next;  }}

簡單測試:

int main(){  List_stack<int> ls;  for (int i = 0; i < 5; i++)    ls.Push(i);  ls.Print();  ls.Pop();  ls.Pop();  cout << endl;  ls.Print();  cout << endl;  cout << ls.Size();  system("pause");  return 0;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 定州市| 望谟县| 武山县| 缙云县| 基隆市| 南昌市| 洱源县| 册亨县| 巴东县| 修文县| 通榆县| 东城区| 贞丰县| 浮山县| 绥化市| 陆河县| 台北县| 巨鹿县| 锡林郭勒盟| 砀山县| 民乐县| 五常市| 鲁甸县| 黔南| 万全县| 太谷县| 通许县| 葵青区| 申扎县| 浙江省| 毕节市| 时尚| 沈阳市| 正安县| 南郑县| 宽城| 山东| 贺兰县| 二手房| 永安市| 灵武市|