★数组和链表的存删查

来源:互联网 发布:武汉java培训 编辑:程序博客网 时间:2024/06/05 20:25

数组:增删慢,查询快

链表:增删快,查询慢

数据结构分别为逻辑结构、存储结构(物理结构)

存储方式分为顺序方式和链式存储

顺序方式:    元素按照某种顺序存放到一片 连续的存储单元。元素之间的逻辑关系是通过他们存储位置来体现。                                    
  优势:
      1  元素直接的逻辑关系是通过他们存储位置体现,因此存储密度高。
      2 可以快速确定元素的存储位置,从而能够实现对元素的随机,快速访问。
  缺点:
      1 插入删除操作,可能会引起大量元素的移动,实现效率低。
      2  存储空间需要预先支配,如果定的太大会造成空间浪费

链式存储: 逻辑上相邻的元素,物理位置上未必相邻,元素之间的逻辑关系由附加的指针域表示。                            
     优势:
       1  元素直接的关系通过指针域表示,因此插入 删除不会引起大量元素的移动。效率高。
       2  可动态的申请 和 释放节点空间,所使用的存储空间大小 与实际存储的数据元素 保存 一致。

链表::

链式存储结构就是两个相邻的元素在内存中可能不是相邻的,每一个元素都有一个指针域,指针域一般是存储着到下一个元素的指针。这种存储方式的优点是插入和删除的时间复杂度为O(1),不会浪费太多内存,添加元素的时候才会申请内存,删除元素会释放内存,。缺点是访问的时间复杂度最坏为O(n),关于查找的算法很少,一般只能遍历,这样时间复杂度也是线性(O(n))的了,频繁的申请和释放内存也会消耗时间。

顺序表的特性是随机读取,也就是访问一个元素的时间复杂度是O(1),链式表的特性是插入和删除的时间复杂度为O(1)。要根据实际情况去选取适合自己的存储结构。

链表就是链式存储的线性表。根据指针域的不同,链表分为单向链表、双向链表、循环链表等等。


顺序方式::顺序存储结构就是两个相邻的元素在内存中也是相邻的。这种存储方式的优点是查询的时间复杂度为O(1),通过首地址和偏移量就可以直接访问到某元素,关于查找的适配算法很多,最快可以达到O(logn)。缺点是插入和删除的时间复杂度最坏能达到O(n),如果你在第一个位置插入一个元素,你需要把数组的每一个元素向后移动一位,如果你在第一个位置删除一个元素,你需要把数组的每一个元素向前移动一位。还有一个缺点,就是当你不确定元素的数量时,你开的数组必须保证能够放下元素最大数量,遗憾的是如果实际数量比最大数量少很多时,你开的数组没有用到的内存就只能浪费掉了。

都有键是没错,可是查询速度和键没有直接关系,键的存在只是逻辑上方便了程序员操作,查询速度和数据结构才有直接关系,因为数据结构和底层有直接关系,查询是在遍历内存空间。
数组数据结构是一片连续的内存,头的地址是知道的,角标可以直接看做是偏移量,所以可以直接锁定要找的那片内存。
链表数据结构在内存中“乱七八糟”,即使知道了角标,还是得从头一个一个的往下查,所以效率直接就低了。
我想应该是这样吧…………