简单实现C++Stack模板

栈的特点是先进后出以及只能在栈顶进行插入和删除操作

本次实现的栈的基本操作:

1)弹栈

2)压栈

3)求栈大小

4)求栈容量

5)判断栈空

6)获取栈顶元素

1、用数组的方式实现栈基本操作

 1 /**
 2 *
 3 *作者:Ycute
 4 *时间:2019-11-15-09.55.27
 5 *题目题意简单描述:用C++模板实现栈
 6 */
 7 
 8 #include<iostream>
 9 #include<cmath>
10 #include<cstring>
11 #include<algorithm>
12 #include<vector>
13 using namespace std;
14 
15 template<typename T>
16 class Stack{
17 public:
18     Stack();
19     ~Stack();
20 public:
21     T top();//获得栈顶元素
22     void push(T t);//入栈
23     T pop();//出栈
24     bool is_empty();//判断栈是否为空
25     int size();//栈大小
26     int capa();//栈容量
27 private:
28     int count;//栈元素数量
29     int capacity;//栈容量
30     T *array;//底层为数组
31 };
32 
33 template<typename T>
34 Stack<T>::Stack(){
35     capacity=1000;
36     array=new T[capacity];
37     count=0;
38 }
39 
40 template<typename T>
41 Stack<T>::~Stack(){
42     delete []array;
43 }
44 
45 /*栈空判断*/
46 template<typename T>
47 bool Stack<T>::is_empty(){
48     return count==0;
49 }
50 /*获得栈顶元素*/
51 template<typename T>
52 T Stack<T>::top(){
53      if(count!=0){
54         return array[count-1];
55     }
56     return -1;
57 }
58 /*入栈*/
59 template<typename T>
60 void Stack<T>::push(T t){
61     if(count!=capacity){
62         array[count++]=t;
63     }
64 }
65 /*出栈*/
66 template<typename T>
67 T Stack<T>::pop(){
68     if(count!=0){
69         return array[--count];
70     }
71     return -1;
72 }
73 
74 /*获得栈大小*/
75 template<typename T>
76 int Stack<T>::size(){
77     return count;
78 }
79 
80 template<typename T>
81 int Stack<T>::capa(){
82     return capacity;
83 }
84 
85 int main(){
86     Stack<int> s1;
87     cout<<"栈大小"<<s1.size()<<endl;
88     cout<<"栈容量"<<s1.capa()<<endl;
89     s1.push(2);
90     s1.push(3);
91     s1.push(4);
92     cout<<"栈是否为空"<<s1.is_empty()<<endl;
93     cout<<"出栈"<<s1.pop()<<endl;
94     cout<<"栈顶"<<s1.top()<<endl;
95     cout<<"栈大小"<<s1.size()<<endl;
96     cout<<"栈容量"<<s1.capa()<<endl;
97     return 0;
98 }

 

2、用单链表的方式实现栈基本操作

用一个指针,采用头插法,实现的入栈出栈

 

  1 /**
  2 *
  3 *作者:YCute
  4 *时间:2019-11-15-10.40.56
  5 *题目题意简单描述:用单链表实现栈
  6 */
  7 
  8 
  9 #include<iostream>
 10 #include<cmath>
 11 #include<cstring>
 12 #include<algorithm>
 13 #include<vector>
 14 using namespace std;
 15 
 16 /*栈数据节点*/
 17 template<typename T>
 18 struct Node{
 19     Node(T t):value(t),next(NULL){};
 20     Node():next(NULL){};
 21     T value;
 22     Node<T> *next;
 23 };
 24 
 25 template<typename T>
 26 class Stack{
 27 public:
 28     Stack();
 29     ~Stack();
 30 public:
 31     T top();//获得栈顶元素
 32     T pop();//出栈
 33     void push(T t);//入栈
 34     int size();//栈大小
 35     bool is_empty();//判断栈空
 36 private:
 37     int count;
 38     Node<T>* head;
 39 };
 40 
 41 template<typename T>
 42 Stack<T>::Stack(){
 43     count=0;
 44     head = new Node<T>();
 45     head->next = nullptr;
 46 }
 47 
 48 template<typename T>
 49 Stack<T>::~Stack(){
 50     while(head->next!=nullptr){
 51         Node<T> *nodeDel=head->next;
 52         head->next=head->next->next;
 53         delete nodeDel;
 54     }
 55 }
 56 
 57 /*获得栈顶元素*/
 58 template<typename T>
 59 T Stack<T>::top(){
 60     if(head->next!=nullptr){
 61         return head->next->value;
 62     }
 63 }
 64 
 65 /*出栈*/
 66 template<typename T>
 67 T Stack<T>::pop(){
 68     if(head->next!=nullptr){
 69         Node<T> *nodeDel=head->next;
 70         head->next=head->next->next;
 71         T value=nodeDel->value;
 72         delete nodeDel;
 73         --count;
 74         return value;
 75     }
 76 }
 77 
 78 /*入栈*/
 79 template<typename T>
 80 void Stack<T>::push(T t){
 81     Node <T> *subNode=new Node<T>(t);
 82     subNode->next=head->next;
 83     head->next=subNode;
 84     ++count;
 85 }
 86 
 87 /*获得栈元素*/
 88 template<typename T>
 89 int Stack<T>::size(){
 90     return count;
 91 }
 92 
 93 /*判断栈空*/
 94 template<typename T>
 95 bool Stack<T>::is_empty(){
 96     return count==0;
 97 }
 98 
 99 
100 
101 int main(){
102     Stack<int> s1;
103     s1.push(1);
104     s1.push(2);
105     s1.push(3);
106     s1.push(4);
107     cout<<"栈大小"<<s1.size()<<endl;
108     cout<<"栈顶元素"<<s1.top()<<endl;
109     while(!s1.is_empty()){
110         cout<<" "<<s1.pop();
111     }
112     cout<<"栈大小"<<s1.size()<<endl;
113     return 0;
114 }

 

 

 

 

posted @ 2019-11-15 14:47  LifeRunningError  Views(577)  Comments(0Edit  收藏  举报