顺序表与链表

                                             1.顺序表

1.1顺序表的概念

        顺序表是用一段物理地址连续的存储单元依次存储元素的线性结构,一般情况下存储的是数组,在数组上完成增删查改。顺序表可分为两类。

        静态顺序表:是用定常数组来存储数据。

        动态顺序表:使用动态开辟的数组元素。通常用malloc函数进行初始化,用realloc进行增容。

1.2顺序表的优缺点

        优点:可以随机访问元素。时间复杂度为O(1)。

        缺点:1.顺序表会进行空间上的浪费。

                   2.进行删除与拆入元素的时候需要移动元素。时间复杂度为O(N)。

                   3.可能会造成空间碎片。

1.3顺序表的空间碎片

        为什么顺序表会有空间碎片的产生呢?所谓顺序表,就是把逻辑相邻的元素放在物理地址相连的存储单元上。因为是相连的,存储的时候就需要进行整块的单元存储。将多个大小不同的顺序表按左右相连进行排序。这时,将中间的顺序表进行释放。被释放的顺序表的存储空间会始终留在原地。想要使用这块空间就必须放入比该空间小的存储空间。当放的空间小于该空间的时候,如果空间未完全占用,就会有一块小缝隙未进行使用,那块缝隙因为太小而使用不掉。当程序进行长时间运行时,并以一定的频率产生缝隙,这种小的缝隙越来越多,形成的空间碎片也越来越多。造成空间的浪费。

2.链表

 2.1链表的概念

       链表是指逻辑上连续,物理空间上不连续、不顺序的线性结构。数据元素的逻辑连续通过链表中的指针链表进行连续的。

2.2链表的优缺点

        优点  :1.插入元素与删除元素不需要移动元素。时间上为O(1)。 

                     2.链表是动态数据结构,它可以在运行时通过分配和取消分配内存来增长和缩小。所以可以不用进行初始化

                     3.链表在运行时可以增加或减少内存,他的内存利用率高。

                     4.需要更多内存。因为每一个内存都需要分配一个指针指向下一个链表。

        缺点:1.不能随机访问元素。

                   2.遍历困难

链表与顺序表的不同

1.1从物理地址上比较

        链表的物理地址是非连续,非顺序的。顺序表的物理地址是顺序的。

1.2从空间与时间上比较

        链表在增加元素与删除元素的时候,不需大量的挪动元素,可以直接进行删除,增加,时间上为O(1)。顺序表在增加元素与删除元素的时候,需要进行大量的挪动元素,时间上为O(N)。

        链表在访问元素的时候需要进行遍历,时间上为O(N)。顺序表在访问时候可以随机访问下标时间为O(1)。

        顺序表的元素查找因为可以直接访问时间上为O(1),链表需要一直进行遍历,比顺序表慢得多。

1.3从数据结构上比较

        链表是由一段不连续的地址节点组成的线性表,每个节点可以是一个或多个连续的单元块,分配在堆区上,需要手动开辟与释放。

        顺序表的静态顺序表由定长数组组成,在地址上为连续的,分配在栈区上。动态顺序要为动态开辟的空间,分配在堆区上。

3.顺序表与链表的选取

        由与顺序表具有随机下标访问的功能,在查找元素方面远远大于链表,所以需要进行元素查找的时候选用顺序表。

        链表在对于增删方面,因为不需要遍历,可以直接进行插入或者删除,在时间上为O(1),所以需要进行增删的时候选用链表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值