数据结构-数组&广义表

数据结构-数组&广义表

数组

        数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 这些无序排列的同类数据元素的集合称为数组。
        数组是用于储存多个相同类型数据的集合。
        数组是在内存中存储相同数据类型的连续的空间,声明一个数组就是在内存空间中划出一串连续的空间

数组的使用
        数组长度一旦声明,不可改变不可追加。数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。

声明数组:

String str[]=new String[]{"a","b","c","d","e"};      //String 类型

int arr[]=new int[13];//int 类型   定义一个长度为13的数组

优缺点:

  • 优点
            支持随机访问: 数组存于连续的地址空间,并且存储的是相同类型的数据,这使得数组可以通过下标与数据类型的大小直接定位到数据位置。

  • 缺点
            插入效率低,因为数组要保证插入后数据的连续性,需要将插入位置后面的数据依次向后进行移动,所以插入的效率很低。插入时最好的情况是在数组末尾插入,时间复杂度为O(1);最坏的情况是在数组起始位置插入,时间复杂度为O(n);插入的平均时间复杂度为 (1+2+…+n)/n = O(n)。
    在这里插入图片描述

广义表

         广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。它被广泛的应用于人工智能等领域的表处理语言LISP语言中。

广义表的定义如下:
         它是n(n>0)个数据元素a0,a1,……,an-1组成的有限序列,记为GList=(a0,a1,……,an-1),其中,ai(0<=i<n)是原子或子广义表,原子是不可分解的数据元素。在这里插入图片描述
具体介绍可查看这篇文章:https://blog.csdn.net/wobushixiaobailian/article/details/80390847

广义表的数据结构:

广义表节点(data数据域,child子表地址域,next后继结点地址域)

举例:已知三个有名广义表

          L(a,b)

          T(c,L(a,b))

          G(d,L(a,b),T(c,L(a,b)))

G的存储结构如下:
在这里插入图片描述

为什么需要头节点?便于在表头增加删除结点。如果不要头结点,那么对广义表的表头添加删除,将可能影响其他广义表中元素。比如,上面G的存储结构改为不要头结点的方式。如下:
在这里插入图片描述
如果此时通过G访问子表L并删除L中的第一个结点a后,G中L结点的child指向原a结点的后继结点b。而这样的删除并没有影响到T表中的L结点的child域。如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值