C#实现栈
2016-08-01 16:13
281 查看
概述
先用C#实现一个栈的类,如下:public class MyStack<T> : IEnumerable<T>, IDisposable { private int _top = 0; private int _size = 0; private T[] _stack = null; public int Top { get { return _top; } } public int Size { get { return _size; } } public int Length { get { return _top; } } public T this[int index] { get { return _stack[index]; } } public MyStack(int size) { _size = size; _top = 0; _stack = new T[size]; } public bool IsEmpty() { return _top == 0; } public bool IsFull() { return _top == _size; } public void Clear() { _top = 0; } /// <summary> /// 入栈 /// </summary> /// <param name="node"></param> /// <returns></returns> public bool Push(T node) { if (!IsFull()) { _stack[_top] = node; _top++; return true; } return false; } /// <summary> /// 出栈 /// </summary> /// <returns></returns> public T Pop() { T node = default(T); if (!IsEmpty()) { _top--; node = _stack[_top]; } return node; } public void Traverse() { for(int i = 0; i < _top; i++) { Console.WriteLine(_stack[i]); } } public IEnumerator<T> GetEnumerator() { for(int i = 0; i < _stack.Length; i++) { if(_stack[i] != null) { yield return _stack[i]; } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public void Dispose() { _stack = null; } }
上面要注意的是入栈时,是直接把值赋给栈顶,然后再将栈顶加1,出栈的时候,先将栈顶减一,再出栈,切记。
实例一:
用栈来实现进制转换,即十进制转化为2进制、8进制、16进制,代码如下:/// <summary> /// 十进制转换为其他进制 /// </summary> /// <param name="number">要转换的数字</param> /// <param name="target">目标进制</param> /// <returns></returns> public static string Process(int number, int target) { string result = string.Empty; string format = "0123456789ABCDEF"; MyStack<int> stack = new MyStack<int>(30); int mod = 0; while(number != 0) { mod = number % target; stack.Push(mod); number = number / target; } while (!stack.IsEmpty()) { int pos = stack.Pop(); result += format[pos]; } return result; }
测试代码:
string slt = MoronicConvert.Process(98758, 16); Console.WriteLine(slt);
运行结果:
实例二
用栈来检查一个字符串括号是否配对,代码如下:/// <summary> /// 检查字符串中括号是否成对匹配 /// </summary> /// <param name="charter">待检查的字符串</param> /// <returns></returns> public static bool Check(string charter) { bool result = false; MyStack<char> stack = new MyStack<char>(30); MyStack<char> needStack = new MyStack<char>(30); char currentNeed = '0'; for (int i = 0; i < charter.Length; i++) { if(charter[i] != currentNeed) { char t = charter[i]; stack.Push(t); switch (t) { case '[': if(currentNeed != '0') { needStack.Push(currentNeed); } currentNeed = ']'; break; case '(': if(currentNeed != '0') { needStack.Push(currentNeed); } currentNeed = ')'; break; case '{': if (currentNeed != '0') { needStack.Push(currentNeed); } currentNeed = '}'; break; } } else { stack.Pop(); currentNeed = needStack.Pop(); } } if (stack.IsEmpty()) { result = true; } return result; }
测试代码:
bool check = SpellCheck.Check("[[([)]]]"); Console.WriteLine(check.ToString());
运行结果:
总结:
希望能帮到你,望推荐!相关文章推荐
- 在C#里实现DATAGRID的打印预览和打印
- ping程序的C#实现
- 由SAT问题展开说(2)[演化计算c#实现上]
- 数据结构与算法(C#实现)系列---广义树(一)
- 数据结构与算法(C#实现)系列-----前言
- 数据结构与算法(C#实现)系列---广义树(二)
- 由SAT问题展开说(2)[演化计算c#实现下]
- 数据结构与算法(C#实现)系列---树(一)
- 数据结构与算法(C#实现)系列---树(三)
- 用JScript实现VB.Net,C#的[委托Delegate]:
- 用C# Builder实现Web服务器
- 设计模式之C#实现(二)---Builder
- 设计模式之C#实现(四)---- ProtoType
- 用C# Builder实现文件下载
- 从C#的Singleton设计模式实现看.NET Framework特性对开发者的重要性
- C#实现的18位身份证格式验证算法
- 类似 MSDN CSDN 导航树效果 ASP.Net(C#) + JavaScript 实现!
- 在C#程序中实现插件架构
- 数据结构与算法(C#实现)系列---N叉树(二)
- 数据结构与算法(C#实现)系列---二叉堆(数组实现)