数据结构有什么用?C语言为例

        说到数据结构,可能最先想到的就是不同类型数据的占用空间不同,那还有没有其他用途呢,肯定是有的,下面我就用C当中的数组和链表两种存储形式来举例说明数据结构有什么用。

目录

一、数据结构有什么用

二、数组和链表的存储形式

三、数组和链表有什么区别


一、数据结构有什么用

        在许多类型的程序设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重依赖于是否选择了最优的数据结构。合理选择和精心设计的数据结构可以有效地提高程序的运行效率,同时,还能节约存储空间的使用。下面讨论如何以数组结构和链表结构来处理学生信息,通过这两种数据结构的优劣性比较,来体现数据结构选择的重要性。

二、数组和链表的存储形式


        数组是一种可以存放数据的容器,其数据在内存中连续存放,访问数组元素时,可以直接使用数组名加下标的方式。例如,要处理一个有 42个学生的班级的学生信息,将其存储在数组中,具内存组织形式如图1-2所示。其中,数组序号从0开始排,即序号为n的元系实际为n+l个学生。将该数组数据结构名命名为stuArray,它一般包含数组第一个元素的地址信息,因为数组是连续存放的,因此,只要把第一个元素地址加上N,即可得到第N+1个元素的地址。若要访问第三个学生王五的信息,只需使用stuArray[2](等效于stuArray+2,把第一个元素的地址加上2)即可。类似地,要访问数组序号为n的学生信息,只需使用stuArray[n -1]可,只需要一步操作。


        链表也是一种可以存放数据的容器,但是其数据在内存中是分散存放的。链表中的相邻元素间存在一些关系,这种关系有很多种形式,最典型的一种是每个链表元素都包含下一个元素的地址信息,通过该元素的信息就可以查找到下一个元素。同样,如果把上述班级学生信息存储在链表中,其内存的组织形式如图1-3所示。

         将该链表数据结构命名为 stuLink,一个链表的已知信息只有链表头的地址。如果要在该链表中访问第三个学生王五的信息,需要先访问第一个学生张三的信息从中获得第二个学生李四的地址信息,然后才能访问李四的内存,再从中得到第三个学生王五的地址信息,之后才能访问王五的内存。也就是说,在数组中访问一个元素,必须先按顺序从第一个元素往后依次访问,直至得到要访问的元素。

三、数组和链表有什么区别

        由上面可以知道,访问数组的效率远远高于访问链表。因此,如果程序的任务需要频繁地访问容器中的元素时,比如,一个用于查询学生数据的系统,需要频繁地读取数据,应该选择数组来存储学生信息,其运行效率要远远高于使用链表结构。
        但是,数组增删元素时的效率远远不如链表。例如,李四同学由于过度沉迷C语言而旷课过多,被学校勒令退学。因此,班级信息中要删除李四的资料。如果使用数组 stuArray存储学生信息的话,删除操作必须先删除stuArray[1],再将其后面的stuArray[2]到stuArray[41]都向前移一个位置,这样共需要41步操作。删除后,stuArray的内存组织形式如图1-4所示。
        如果使用链表stuLink存储学生信息的话,操作就相对简单。首先,删除李四的信息,同时,只要修改李四前面的学生张三的相邻元素信息即可。在删除李四前,张三中保存的下一个元素的地址是李四的地址;删除时,将其修改为王五的地址。整个过程总共只需要两步操作。删除李四的信息后,stuLink 的内存组织形式如图1-5所示。

         使用数组和链表处理信息还有其他方面的不同,有需要的同学科再做了解。

        没有十全十美的数据结构,每种数据结构都有其局限性,要根据程序任务的需求来选择合适的数据类型。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值