数据结构 -- 链式栈

栈:先进后出的数据结构。

C#版本:

  1 namespace LinkStack
  2 {
  3     /// <summary></summary>
  4     interface IStack<T>
  5     {
  6         /// <summary>推入元素操作</summary>
  7         bool Push(T _data);
  8         /// <summary>弹出元素操作</summary>
  9         bool Pop(ref T _data);
 10         /// <summary>取栈顶元素</summary>
 11         bool GetTop(ref T _data);
 12         /// <summary>获取队列长度</summary>
 13         int StackLenght();
 14         /// <summary>是否为空</summary>
 15         bool IsEmpty();
 16         /// <summary>清空队列</summary>
 17         void Clear();
 18         /// <summary>是否满</summary>
 19         bool IsFull();
 20     }
 21 
 22     /// <summary>栈节点类</summary>
 23     class StackNode<T>
 24     {
 25         #region 私有属性
 26         private T data; //数据项
 27         private StackNode<T> next; //指针项
 28         #endregion
 29         #region 公有属性
 30         public T Data
 31         {
 32             get
 33             {
 34                 return data;
 35             }
 36             set
 37             {
 38                 data = value;
 39             }
 40         }
 41         public StackNode<T> Next
 42         {
 43             get
 44             {
 45                 return next;
 46             }
 47             set
 48             {
 49                 next = value;
 50             }
 51         }
 52         #endregion
 53 
 54         #region 构造函数
 55         public StackNode()
 56         {
 57             Data = default(T);
 58             Next = null;
 59         }
 60         public StackNode(T _data = default(T), StackNode<T> _next = null)
 61         {
 62             Data = _data;
 63             Next = _next;
 64         }
 65         #endregion
 66     }
 67 
 68     /// <summary>链式栈类</summary>
 69     class LinkStack<T>: IStack<T>
 70     {
 71         #region 成员变量
 72         private StackNode<T> top; //栈顶指示器
 73         private int nodeNum;
 74         #endregion
 75 
 76         #region 访问函数
 77         public LinkStack()
 78         {
 79             top = null;
 80             nodeNum = 0;
 81         }
 82 
 83         /// <summary>在栈顶推入一个新的元素</summary>
 84         public bool Push(T _data)
 85         {
 86             if (IsFull())
 87                 return false;
 88             StackNode<T> q = new StackNode<T>(_data);
 89             if (top == null)
 90             {
 91                 top = q;
 92             }
 93             else
 94             {
 95                 q.Next = top;
 96                 top = q;
 97             }
 98             ++nodeNum;
 99             return true;
100         }
101 
102         /// <summary>弹出栈顶元素值!值保存在_data中</summary>
103         public bool Pop(ref T _data)
104         {
105             if (IsEmpty())
106                 return false;
107 
108             _data = top.Data;
109             top = top.Next;
110             --nodeNum;
111 
112             return true;
113         }
114 
115         /// <summary>取栈顶元素值!值保存在_data中</summary>
116         public bool GetTop(ref T _data)
117         {
118             if (IsEmpty())
119                 return false;
120             _data = top.Data;
121 
122             return true;
123         }
124 
125         /// <summary>清空栈</summary>
126         public void Clear()
127         {
128             top = null;
129             nodeNum = 0;
130         }
131 
132         /// <summary>栈是否为空</summary>
133         public bool IsEmpty()
134         {
135             if (top == null && nodeNum == 0)
136                 return true;
137             return false;
138         }
139 
140         /// <summary>求栈元素个数操作</summary>
141         public int StackLenght()
142         {
143             return nodeNum;
144         }
145 
146         /// <summary>链式栈不会满的</summary>
147         public bool IsFull()
148         {
149             return false;
150         }
151 
152         #endregion
153 
154     }
155 
156 }
原文地址:https://www.cnblogs.com/jiangchenxi/p/8288044.html