【java版】数据结构与算法分析学习之路【二】表【数组+链表】

来源:互联网 发布:gis数据挖掘前景 编辑:程序博客网 时间:2024/06/03 21:28

  • PS:我一直都在想到底应该用什么样的思路去学习数据结构,用什么样的方式去记录学习的内容可以做到篇幅最少但是内容最精华?毕竟之前不是计算机科班出身,对于很多东西理解起来比较困难。然后我在网上看了很多大牛同学的博客,各种风格的都有,不乏有的长篇大论,给大家分析的非常清楚,善于从非技术的角度去切入,方便我们初学者理解;也有一些大牛以精简的风格为主,只写精华,免去很多繁琐的介绍,这种比较适合有一定基础的,再看起来效率比较高。所以看完他们的博客我觉得我应该根据自己的实力水平去选择风格,首先能让自己看得懂,愿意看第二遍,看的时候真的是有收获,估计我这种笨鸟都能看的懂的,即便大家是菜鸟也能有些收获,毕竟博客这个东西是分享出来帮助别人,顺便成就一下自己的事情,不说了,我决定认真一次,好好学习一下数据结构。【博客我尽量选择我认为重点的内容详尽一些,非重点的内容精简一些】

一.链表和数组的引入及其两者之间的关系

  1. 数组
  • 数组是个啥东西?
数组是个表,是个连续存储的表
  • 数组有啥特点?
在C里面,首先我们知道数组容量是固定的,使用前先分配大小,所以使用后就不是很方便调整容量;解决这个问题在C里面一般是预先估计数组的大小,然后用双倍的容量创建数组,是不是很麻烦?
正因为数组是连续存储和容量固定,所以注定数组不方便进行增删这种改变容量的操作。原因是假如在数组的非末元素位置插入或者删除元素都会导致整个数组的移动,这个开销是有风险的,尤其是在数组的前面位置进行操作。这个问题的根源在于数组必须是连续存储的,所以问题不容易从根源解决,最好的解决方式就是找个非连续存储的数据结构问题就好办了,于是链表这个非连续存储的表就出现了。
2.链表
  • 链表是个啥东西?
链表是个表,是个非连续存储的表。
  • 链表有啥特点?
由于链表的非线性存储,所以链表非常适合进行插入和删除操作;链表的是有节点“链接”而成,每个节点有数据域和指针域,指针域存放的是下一个节点的首地址。如果只有只有指针域,就是单链表,如果有两个指针域,那么就是双链表。
3.链表和数组的比较【特点决定优缺点】
  • 从操作角度看优缺点;    
   数组:
优点:查询效率比链表高
缺点:
不适合插入和删除【动态存储
    链表:
     优点:
适合插入和删除【可动态存储】   
     缺点:查询效率低
  • 从访问方式角度看区别:
数组:
可以随机访问
链表:
不支持随机访问,只能顺序访问
  • 从可扩展性角度看区别:
数组:
容量不易调整,可扩展性差
链表:
容量可以灵活调整,可扩展性好
  • 从内存存储来看
    数组:从栈中分配空间, 对于程序员方便快速,但是自由度小
    链表:从堆中分配空间, 自由度大但是申请管理比较麻烦.

二.java中的动态数组和链表及其操作

  1. 动态数组[ArrayList]
  2. 双向链表[LinkList]

【先吃饭】

0 0
原创粉丝点击