请教一种算法, 实现数据存储和计算

tank_2009 2010-06-07 01:04:06
int[] a = new int[1000]; // 数组大小暂定1000,以后根据实际情况调整

最开始时,下标为0,即从 a[0]开始赋值,直到a[999], 当存第1001个数时, 整个数组的每个元数往前移动,
即a[0]= a[1], a[1] = a[2]....以此类推, 从而实现每次新加入的数据都在数组最尾, 并且 数组保存最新的1000个数据

请问怎样实现效率会比较高呢?
...全文
154 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
烈火蜓蜻 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 tank_2009 的回复:]
int[] a = new int[1000]; // 数组大小暂定1000,以后根据实际情况调整

最开始时,下标为0,即从 a[0]开始赋值,直到a[999], 当存第1001个数时, 整个数组的每个元数往前移动,
即a[0]= a[1], a[1] = a[2]....以此类推, 从而实现每次新加入的数据都在数组最尾, 并且 数组保存最新的1000个数据

请问怎样实现效率会比较高……
[/Quote]
知不知道有个叫做循环队列的?


搞一个变量(比如说是k),用来保存下标,再搞一个值,用来表示,数组有没有满
当赋值到第1001个数据的时候呢,你就把这个第1001的数据存到a[0],然后把数组满的标志设为真

如果你要取出前数据,
先判断数组满的标志,如果满,则从 k+1 开始,是第1个数据(最后一个数据就是k),然后到 k+1==1000时,就把k赋值为 0又开始


如果数组没有满,则,第1个数据就是0,最后一个数据就是k

不知道,楼主明白了没有?这样就不需要一直赋值啦
anerky 2010-06-07
  • 打赏
  • 举报
回复
数组已开始就分配了

list或者hastable都是太多多余的开销了,需要多余的内存操作。


最简单的方法是改变你的index,写一个index的函数,换句话说就是如果用一个普通的array(连续内存)来做一个循环array(收尾相接)。




sxldfang 2010-06-07
  • 打赏
  • 举报
回复
队列
wuyq11 2010-06-07
  • 打赏
  • 举报
回复
使用ArrayList,List<T>,hashtable都可以
huming_h 2010-06-07
  • 打赏
  • 举报
回复
同上,用可变长数组。
我姓区不姓区 2010-06-07
  • 打赏
  • 举报
回复
用List<int>不就可以了吗?

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧