C#实现顺序栈和链栈的代码实例
自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现:
注意以下类,接口都是在一个命名空间下
栈的接口:包括了常用的方法
namespace栈 { interfaceIStackDS{ intCount{get;} intGetLength(); boolIsEmpty(); voidClear(); voidPush(Titem); TPop(); TPeek(); } }
顺序栈的实现,参照顺序表实现
namespace栈 { classSeqStack:IStackDS { privateT[]data;//栈 privateinttop;//栈顶 //构造函数 publicSeqStack(intsize){ data=newT[size]; top=-1; } publicSeqStack():this(10) { data=newT[10]; top=-1; } //栈的元素个数属性 publicintCount { get { returntop+1; } } //清空栈的方法 publicvoidClear() { top=-1; } //获取栈的长度的方法 publicintGetLength() { returnCount; } //查看栈顶元素是什么 publicTPeek() { if(top==-1) { Console.WriteLine("当前栈没有元素"); returndefault(T); } returndata[top]; } //出栈(取出栈顶元素,并移除) publicTPop() { Ttemp=data[top]; top--; returntemp; } //入栈 publicvoidPush(Titem) { data[top+1]=item; top++; } //栈中是否源元素 publicboolIsEmpty() { returnCount==0; } } }
以上是顺序栈的实现
下面是链栈的实现,定义一个节点类
namespace栈 { //////链栈的节点 /// ///classNode { privateTdata;//数据 privateNode next;//指向下一个的引用 //四个构造函数,不是都有用,,以及上面两个变量的属性, publicNode() { data=default(T); next=null; } publicNode(Tdata) { this.data=data; next=null; } publicNode(Tdata,Node index) { this.data=data; this.next=index; } publicNode(Node index) { data=default(T); next=index; } publicTData { get{returndata;} set{data=value;} } publicNode Next { get{returnnext;} set{next=value;} } } }
链栈的实现:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; namespace栈 { classLinkStark:IStackDS { privateNode top;//栈顶元素节点 privateintcount=0;//栈里面的元素 publicintCount { get { returncount; } } /// ///清空栈中数据 /// publicvoidClear() { count=0; top=null; } //////栈的长度 /// ///publicintGetLength() { returnCount; } /// ///栈中是否有数据 /// ///publicboolIsEmpty() { returncount==0; } publicTPeek() { returntop.Data; } /// ///出栈取得栈顶元素然后删除 /// ///publicTPop() { Tdata=top.Data; top=top.Next; count--; returndata; } /// ///入栈 /// ///publicvoidPush(Titem) {//把新添加的元素作为头结点,就是栈顶 Node newNode=newNode (item); newNode.Next=top; top=newNode; count++; } } }
以上是链栈的实现
下面是测试:
- C#库中带的栈
- 自己的写的顺序栈
- 自己写的链栈
amespace栈 { classProgram { staticvoidMain(string[]args) { //使用BCL中的栈 //Stackstack=newStack (); //使用自己的栈 //SeqStack stack=newSeqStack (); //使用自己的链栈 IStackDS stack=newLinkStark (); stack.Push('a'); stack.Push('b'); stack.Push('c'); Console.WriteLine("push后的数据个数"+stack.Count); chartemp=stack.Pop(); Console.WriteLine("pop之后数据是:"+temp); Console.WriteLine("pop之后数据个数"+stack.Count); chartemp2=stack.Peek(); Console.WriteLine("Peek之后数据是:"+temp2); Console.WriteLine("Peek之后数据个数"+stack.Count); Console.ReadKey(); } } }
下篇队列的实现同理:https://www.nhooo.com/article/149555.htm
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。