数据结构-链式栈c++

栈的最基本特点先进后出,本文简单介绍一下用c++写的链式栈

头文件

 1 #ifndef LINKEDSTACK_H
 2 #define LINKEDSTACK_H
 3 
 4 template<class T> class LinkedStack;
 5 
 6 template<class T>
 7 class ChainNode
 8 {
 9     friend class LinkedStack<T>;
10 private:
11     ChainNode(const T& theData, ChainNode *n=0)
12         :data(theData), link(n){}//创建新的结点,"link(n)"表示指向已经入栈的结点
13     T data;
14     ChainNode<T> *link;
15 };
16 
17 template<class T>
18 class LinkedStack
19 {
20 public:
21     LinkedStack():top(0){} //初始化栈,顶结点指针指向空
22     ~LinkedStack() { MakeEmpty(); } //析构函数,清空栈
23     bool IsEmpty() const;//判断栈是否为空
24     T& Top() const;//返回栈顶结点数据域
25     void Push(const T& e);//从栈顶放入结点
26     void Pop();//从栈顶删除结点
27     void MakeEmpty();//不断从栈顶删除结点直到栈为空
28 private:
29     ChainNode<T> *top;
30 };
31 
32 template<class T>
33 bool LinkedStack<T>::IsEmpty() const
34 {
35     return top == 0;
36 }
37 
38 template<class T>
39 void LinkedStack<T>::Push(const T &e)
40 {
41     top = new ChainNode<T>(e, top);//“12行”刚入栈的新节点变为顶结点并指向已经入栈的结点
42 }
43 
44 template<class T>
45 T& LinkedStack<T>::Top() const
46 {
47     if (this->IsEmpty())
48         throw"Stack is empty.";
49     return top->data;
50 }
51 
52 template<class T>
53 void LinkedStack<T>::Pop()
54 {
55     if (this->IsEmpty())
56         throw"Stack is empty. Cannot delete.";
57     ChainNode<T> *delNode = top;//用指针保存要删除的栈顶结点,以备删除该节点
58     top = top->link;
59     delete delNode;//通过指针找到即将被删除的顶结点同时删除
60 }
61 
62 template<class T>
63 void LinkedStack<T>::MakeEmpty()
64 {
65     while (!IsEmpty())
66         Pop();
67 }
68 #endif

源文件,测试用

 1 #include<iostream>
 2 #include"linkedstack.h"
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     cout << "测试链式栈" << endl;
 9 
10     LinkedStack<int> stack1;
11     stack1.Push(5);
12     cout << stack1.Top() << endl;
13     stack1.Push(15);
14     cout << stack1.Top() << endl;
15     stack1.Push(25);
16     cout << stack1.Top() << endl;
17     stack1.Pop();
18     cout << stack1.Top() << endl;
19 
20     return 0;
21 }

 

posted @ 2019-11-07 19:42  yg_staring  阅读(218)  评论(0编辑  收藏  举报