C#实现顺序队列和链队列的代码实例
和上篇栈的实现基本是一个思路:
废话不多说,直接写代码吧
//自定义队列接口 namespace队列 { interfaceIQueue{ intCount{get;} intGetLength(); boolIsEmpty(); voidClear(); voidEnqueue(Titem); TDequeue(); TPeek(); } }
//顺序队列的实现类 namespace队列 { classSeqQueue:IQueue { privateT[]data; privateintcount;//表示当前有几个元素 privateintfront;//队首(队首索引-1) privateintrear;//队尾(队尾元素索引) publicSeqQueue(intsize) { data=newT[size]; count=0; front=-1; rear=-1; } publicSeqQueue() { data=newT[10]; count=0; front=-1; rear=-1; } publicintCount { get { returncount; } } publicvoidClear() { count=0; front=-1; rear=-1; } publicTDequeue() { if(count>0) { Ttemp=data[front+1]; front++; count--; returntemp; } else { Console.WriteLine("队列中没有数据,无法取得队首数据"); returndefault(T); } } publicvoidEnqueue(Titem) { if(count==data.Length) { Console.WriteLine("队列元素已满,不可添加"); } else { if(rear==data.Length-1)//最后一个位置是否有值 { data[0]=item; rear=0; count++; } else { data[rear+1]=item; rear+=1; count++; } } } publicintGetLength() { returncount; } publicboolIsEmpty() { returncount==0; } publicTPeek() { Ttemp=data[front+1]; returntemp; } } }
//链队列的节点类 namespace队列 { classNode{ privateTdata; privateNode next; publicNode(Tdata) { this.data=data; } publicTData { get{returndata;} set{data=value;} } publicNode Next { get{returnnext;} set{next=value;} } } }
//链队列的实现类 namespace队列 { classLinkQueue:IQueue { privateNode front;//头结点 privateNode rear;//尾结点 privateintcount;//表示元素个数 publicLinkQueue() { front=null; rear=null; count=0; } publicintCount { get { returncount; } } publicvoidClear() { front=null; rear=null; count=0; } publicTDequeue() { if(count==0) { Console.WriteLine("队列为空"); returndefault(T); }elseif(count==1) { Ttemp=front.Data; front=rear=null; count=0; returntemp; } else { Ttemp=front.Data; front=front.Next; count--; returntemp; } } publicvoidEnqueue(Titem) { Node newNode=newNode (item); if(count==0) { front=newNode; rear=newNode; count=1; } else { rear.Next=newNode; rear=newNode; count++; } } publicintGetLength() { returncount; } publicboolIsEmpty() { returncount==0; } publicTPeek() { if(front!=null) { returnfront.Data; } else { returndefault(T); } } } }
//以上两个实现类的测试类 namespace队列 { classProgram { staticvoidMain(string[]args) { //CRL中的队列 //Queuequeue=newQueue (); //自己的写的顺序队列 //SeqQueue queue=newSeqQueue (); //自己的链队列 LinkQueue queue=newLinkQueue (); queue.Enqueue(12); queue.Enqueue(34); queue.Enqueue(56); queue.Enqueue(78); queue.Enqueue(90); Console.WriteLine("添加五个元素后的大小:"+queue.Count); inti=queue.Dequeue();//出队(取出并删除) Console.WriteLine("取出的元素是:"+i); Console.WriteLine("出队后队列大小:"+queue.Count); intj=queue.Peek(); Console.WriteLine("Peek取出的元素是:"+j); Console.WriteLine("PeeK后队列大小:"+queue.Count); queue.Clear(); Console.WriteLine("清空后的队列大小:"+queue.Count); Console.ReadKey(); } } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。