不要自己束缚了自己,要让自己“舒服”自己-基本数据结构

      学习编程有一段时间了,发现自己在写代码上有了一个很关键的变化:

                                                   int[] a=new int[10];

类似的句子少了很多。其实从中可以看到几个点:第一,a这种没有代表意义的命名不要出现在程序里,这个要相当注意,其重要性不多说;第二,那个“10”让人感觉有束缚感,没有一点生机,这是今天的主题。

      数组确实是很好用的一个基本结构,对于某些测试非常方便,然而在处理实际应用的时候,总显得自己分配的数量不够用,然后又往前面使劲翻,在定义数组大小的地方改多一点,然后继续写,又觉得不够了,翻回来继续改,用完了改,改了用。。。。。。这种情景在我们这些菜鸟看来是不是很亲切呢?呵呵。。。

为了让自己在编程时存放数据更加舒服、方便,是不是应该寻求一种方式能够让他自动增减大小的?

 

数组队列:常用结构,连续的空间,其实也是一个数组,可以理解为把数组看成一个类,有它自己的方法,包括增(add)、删(delete)、改(updata)、查(search)等等。。。用法很简单:

1、创建这个队列类的对象(某一个类或者基本数据类型的数组:ArrayList A=new ArrayList();)

2、使用这个对象的方法(A.add(Object o);)

当然这也是大部分常见数据结构的用法。数组队列中的每一个元素就相当于数组中元素,只是我们把以前对数组的一些操作封装了起来,也就方便调用,至于封装起来的方法的实现,那就见仁见智了,比如add方法,你可以一次加一个,也可以一次分配n个空间,用完了在分配n个,这样就实现了自动增,是不是比前面那个“10”好用多了?至少不用老是往前翻代码改数组大小了。

 

链表队列:同类型的数据存放在不连续的空间,我们就要用一根链子把它连起来,那么每一个数据元中就应该有一个属性来存放下一个数据元的空间地址,那么我们只要知道第一个头数据,就可以得到整条链子,它同数组队列一样,只是每个节点(相当一个数据元)的构造中有个他本身的类型用来记录他下一个元素的地址:

Node{

Object o;

Node nextNode;

}

然后一系列这些Node通过nextNode连接起来组成一个队列,至于他增、删、改、查等方法的实现也不能像数组队列那样根据下标去完成(注意他没有下标),而只能通过头结点指针一个个往下找,找到要增、删、改、查的地方了在进行相关操作,当然他执行操作没有数组那么麻烦,要新建数组或者整体平移,他只需链接或者断开链接就行了。

链表也不仅仅局限于单向的,就是只记录下一个记录的,他可以同时记录上一个节点和下一个节点,即双向链表,还可以是最后一个节点记录头节点的循环链表,具体要那种就要根据自己的需要,没有最好的,只有更适合自己的,更让自己舒服的那种。

 

树:比较常见的二叉树和哈弗曼树,是链表结构的延伸,也是通过节点指针进行链接,懂了链表的树也会很好理解,也就是多了几个指针:nextNode1,nextNode2....也许还可以记录前一个节点的地址parentNode等等。

总结:以上三种基本数据结构的实现代码至少要敲10遍,要做到给我一张纸,我能写出他们的代码实现,每一遍都会有不同的收获,比如查找链表队列中元素时有没有考虑头节点为空(空链表队列)怎么处理?至于什么时候用数组队列,什么时候用链表队列,让咱在舒舒服服的敲码中来慢慢理解,慢慢领悟。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值