数组与链表

数组和链表是两种数据结构,数组非常简单易用但他有两个非常大的缺点,一个是数组一旦创建无法扩展,另一个数组的查找和删除很慢。

链表改善了一些数组的缺点,但是同样的链表自身也存在一些自己的缺点

 

大0表示法,一种粗略的评价计算机效率的方法,后面的内容会用到表示效率的方法

 

#1.数组

       我们按照数组中的数组是否排序对数组进行划分,将数组分为无序数组和有序数组,无序数组中的数组是无序的,有序数组中是按照升序+降序排序的

##1.1无序数组

        无序数组中的数据是无序的,往数组中添加时不用进行比较和移动数据,所以添加数据的时间相同,效率为0(1)

        至于查找和删除就没有那么快了       效率O(N)

        结论:

     1.插入很快,因为将数据插入到数组的空余位置

      2.查找和删除很慢  ,数组长度为n,平均查找速度是N/2  并且还需要移动数据

##1.2有序数组

         无序数组里面无序   有序数组里面是有序的

         因为有序数组中数据升降排列,所以插入需要进行排序并且移动数据项  所以查找比无序数组慢   删除一样慢  O(N)

          有序数组的查找速度要比无序数组快,因为使用了一个叫二分查找法

           折半查找

           有序数组使用二分查找的效率为 0(logn)  有序数组也可以二分查找来新增和删除数据来提高效率,但依旧  新增删除侯移动数据项

            总结:1.  有序查找比无序高  效率O(logn)

                        2.有序数组删除和新增的效率很慢   O(N)

##1.3数组  总结

          数组虽然简单   但有两个致命的缺点

            1.数组的存储数量有限,创建大了浪费,创建小了过溢

            2.数组的效率比其他数据结构低

       *无序数组插入效率为o(1)时间   插入0(n)

      *  有序数组查o(logn)时间,插入花费O(N)时间

       *删除需要移动平均半数的数据项,所以删除都是O(n)时间

 

#2.链表

           数组一经创建大小就固定,链表做出了需改,只要内存够用就可以无限制扩大

           链表是数组之后应用最广泛的数据结构

##2.1  链表的特点

             链表  保存数据的方式就像一条锁链

             每一个锁链一个节点   调用next()方法可以遍历链表所有数据

             链节点  link中,一个链结点是某一个类的对象,这个类可以叫做LINK,因为链表中有好多的类,所以要不同于链表的类来表达链接点

             每一个Link对象都包含一个对下一个链接点引用的字段    叫做next

            链表本身对象有一个字段指向对第一个链接点的引用

             数组与链表查找数据得区别:数组查找就像一个大仓库,一号房间没有,下一个,找完所有房间就行

            链表中查找数据就像单线汇报的工作者,一个传递一个  最终完成

   ###2.4  其他链表

               单向链表,只能从后往前遍历     还有双端链表  双向链表,有序链表

         双端链表:单向的基础上,新增一个成员变量指向链表的最后一个对象

          双向链表是可以从  first和last两个方向进行遍历   

##链表的效率

            链表的效率

                   在表头插入和删除速度都很快,花费 O(1)

                   平均起来,查找和删除  在指定链接点侯都需要O(n)次比较,虽然数组也需要,但是链表更快一些    不需要移动数据项(只需要改变引用)

#3.总结

   链表解决了数组不能解决扩展的问题,但是链表自身依然存在一些问题(在链表的链接点后面查找&删除&插入效率不高),那么有没有融合了优点又改变了缺点的呢    那就是

二叉树。下一篇介绍二叉树。

posted @ 2022-05-07 17:09  李文浩learning  阅读(80)  评论(0)    收藏  举报