版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#实现泛型动态循环数组队列的方法(3)可以按照元素多少进行扩容缩容;
(4)进行添加删除操作的时间复杂度小于O(n);
优势:在取出放入的操作中消耗的资源更少
劣势:取出特定元素或特定下标元素平均消耗的资源为普通数组平均消耗资源的最大值
循环数组队列
实现目标:(1)根据循环数组构建出循环的队列数据结构
优势:节省资源,运行速度快;
劣势:不能灵活取出
重点:如何实现循环的计算下标语句。
循环下标语句
完整代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceDataStructrue
///summary
///循环数组
///(1)添加功能
///(2)删除功能
///(3)查询(任何、首尾处)功能
///(4)修改(任何,首位处)功能
////summary
///typeparamname="E"/typeparam
classArray2E
privateE[]data;
privateintN;
privateintfirst;
privateintlast;
publicArray2(intcapacity)
data=newE[capacity];
N=0;
first=0;
last=0;
publicArray2():this(10){}
publicintCount{get{returnN;}}
publicboolIsEmpty{get{returnN==0;}}
publicEGetFirst()
returndata[first];
///summary
///添加一个元素
////summary
///paramname="e"/param
publicvoidAdd(Ee)
if(N==data.Length)
ResetCapacity(data.Length*2);
data[last]=e;
last=(last+1)%data.Length;
N++;
///移除早放进的一个元素
///returns/returns
publicERemoveLast()
if(N==0)
thrownewArgumentException("队列已空");
if(N=(data.Length/4))
ResetCapacity(data.Length/2);
Ede=data[first];
data[first]=default;
first=(first+1)%data.Length;
N--;
returnde;
///移除特定下标元素
///消耗大,不建议使用
///paramname="index"/param
publicERemoveAt(intindex)
if(indexdata.Length||index0||N==0)
thrownewArgumentException("非法索引");
if(firstlast)
if(indexfirstindex=last)
thrownewArgumentException("非法索引");
elseif(lastfirst)
Erd=data[index];
for(inti=index+1;i!=last;i=(i+1)%data.Length)
data[i-1]=data[i];
last--;
returnrd;
///移除特定元素
publicERemove(Ee)
for(inti=first;i!=last;i=(i+1)%data.Length)
if(data[i].Equals(e))
returnRemoveAt(i);
returndata[last];
///对数组进行扩容操作
///paramname="newcapacity"/param
privatevoidResetCapacity(intnewcapacity)
E[]data2=newE[newcapacity];
for(inti=0;ii++)
data2[i]=data[first];
first=(first+1)%data.Length;
last=i+1;
data=data2;
publicoverridestringToString()
//实例化
StringBuilderres=new();
//重写格式1:输出数组元素个数以及长度
//res.Append(string.Format("Array1:count={0}capacity={1}\n",N,data.Length));
res.Append(string.Format("A2Queue:Count={0}Capacity={1}\n[",N,data.Length));
res.Append(data[(first+i)%data.Length]);
if(i!=N-1)
res.Append(',');
res.Append(']'+"\n");
//返回
returnres.ToString();
}
补充:c#使用数组实现泛型队列QuqueT,以循环的方式使用数组提高性能
一种先进先出的数据结构
提供一个确定容量的高性能队列的实现更进一步可以对队列做动态扩容,每次队列满了的时候增加队列容量队列也可以使用链表实现
usingSystem;
namespaceDataStructure
///summary
///用数组实现队列
///用2个index标记开始合结束
////summary
///typeparamname="T"/typeparam
publicclassArrayQueueT
privateintmCapicity;
privateintmStartIndex;
privateintmEndIndex;
privateintmCount;
privateT[]mArray;
publicArrayQueue(intcapicity)
mCapicity=capicity;
mArray=newT[capicity];
publicintCount
returnmCount;
publicboolIsFull
returnmCount==mCapicity;
publicintCapicity
get{returnmCapicity;}
publicboolIsEmpty
returnmCount==0;
publicvoidClear()
mStartIndex=0;
mEndIndex=0;
mCount=0;
mCapicity=0;
mArray=null;
publicvoidEnqueue(Te)
//队列满了
if(IsFull)
thrownewException("queueisfull");
mArray[mEndIndex]=e;
mCount++;
//计算下一个位置
mEndIndex++;
if(mEndIndex==mCapicity)
mEndIndex=0;
publicTDequeue()
//队列空
if(IsEmpty)
thrownewException("queueisempty");
varr=mArray[mStartIndex];
//计算下一次取元素的index
//取出元素后增加start
mStartIndex++;
//到达尾部,开始循环,下一次从头开始取
if(mStartIndex==mCapicity)
mStartIndex=0;
mCount--;
returnr;
}
测试代码
namespaceDataStructure
publicclassArrayQueueTest:BaseSolution
publicvoidTest()
varqueue=newArrayQueueint
queue.Enqueue(1);
queue.En
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年全国统考教师资格考试《教育教学知识与能力(小学)》练习题审定版附答案详解
- 2024-2025学年度宝鸡职业技术学院单招《语文》综合提升测试卷附参考答案详解【综合题】
- 2024-2025学年农村信用社招聘考试题库试题(精练)附答案详解
- 2024-2025学年度执业兽医测试卷及参考答案详解(综合卷)
- 2024-2025学年度施工员模拟题库含答案详解AB卷
- 2024-2025学年度监理工程师全真模拟模拟题及完整答案详解【名校卷】
- 2024-2025学年度天津城市建设管理职业技术学院单招数学练习题及参考答案详解【研优卷】
- 2024-2025学年度计算机四级考前冲刺练习题及参考答案详解(研优卷)
- 2024-2025学年度广东环境保护工程职业学院妇产护理期末模拟试题带答案详解(突破训练)
- 企业资产完备无损承诺书(6篇)
- 汽轮机组试车方案
- 漆安慎力学第二版课后习题解答及漆安慎-力学答案
- PCI围术期强化他汀治疗的获益和机制课件
- 沥青搅拌站安全生产风险分级管控体系方案资料(2022-2023版)
- WTO海关估价协议中文版
- 【广东省】工作证明模板(仅供参考)
- YS/T 613-2006碳膜电位器用电阻浆料
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- GB/T 17626.10-2017电磁兼容试验和测量技术阻尼振荡磁场抗扰度试验
- GB/T 14536.6-2008家用和类似用途电自动控制器燃烧器电自动控制系统的特殊要求
- 《乡风文明建设》(王博文)
评论
0/150
提交评论