02_线性表

1、线性表的顺序存储结构与程序设计语言中的一维数组有何差异?

        都用一片连续的存储空间存放元素,都可按下表或随机存取元素,但二者不等同。以为数组只有按下标存储元素,而顺序表可以有线性表的所有操作。一般情况,顺序表长度可变,数组长度分配后不可变。线性表的顺序存储届结构知识借用程序设计语言中的一位数组的形式表示。

2、何时用顺序存储结构,何时用链式存储结构?

        频繁查找或存取表中元素,而对插入删除较少时可以用顺序存储结构

        事先难确定长度,以及主要操作是插入删除时用链式存储结构

3、线性表以O(1)时间复杂度,存取表中第i个数据元素,应该采取何种存储结构?

        顺序存储结构,之间按照下标获取表中元素

4、等概率下,长度n的顺序表中插入和删除一个数据元素需要移动其他元素的位置,移动元素的个数主要取决于什么因素?

        数据的逻辑结构可以独立于数据的存储结构,这是因为数据的逻辑结构设计是在数据的分析阶段进行的,而数据的存储结构设计则是在数据的设计阶段进行的。反之,数据的存储结构不能独立于数据的逻辑结构,这是因为数据的存储结构是数据的逻辑结构在计算机存储中的映像。

5、长度为n的顺序表(a1,a2,....an)的第i个位置(1<= i <= n)插入一个新的数据元素的概率为

pi = 2(n-i+1) / n(n+1),则平均插入一个元素所需要的移动元素次数的期望值(平均次数)是多少?

        这种说法正确。例如在长度为n的线性表中进行插入或者删除操作,当线性表采用顺序存储结构时,需要平均移动将近一半的数据元素的位置,操作的时间复杂度为O(n),而在链式存储结构下,则不需要移动数据元素的位置,操作的时间复杂度为0(1),与线性表的长度无关。

6、如何看待线性表的顺序存储结构和链式存储结构所占存储空间开销大小的比较?

        这里的0个输人是指算法的输人不是通过键盘或者其他输人设备输人的,而是由算法的内部确定初始条件,或者通过算法内部诸如赋值语句等方式给出所需要变量的初值,被认为是一种特殊的输人。因此,在某些特殊情况下,一个算法可以没有输人。

7、线性表顺序存储的三个弱点:1 插入删除时间效率低,2 空间难估计不能充分利用,且需要提前分配,3 扩容比较困难。链式存储是否克服这三个弱点?

        一般情况下,线性表采用链式存储结构的确能够克服顺序存储结构的三个弱点。首先,进行插人,删除操作时不需移动其他元索,只需修改指针,时间复杂度为0(1);其次,不需要预先分配空间,可根据实际需要动态申请空间,使空间得到充分利用;其三,表的容量仅受系统可用内存空间的限制。但是,由于链表中每个链结点设置的指针增加了空间开销,如果系统的可用空间不能满足要求,会使第3个弱点难以克服。

8、顺序存储是否只能用来存储具有线性关系的数据?

        此说法不正确。顺序存储结构不仅可以用来存储具有线性关系的数据,如线性表,也可以用来存储具有非线性关系的数据,例如,二叉树也可以采用顺序存储结构。

9、链表中的头结点是否是必须的?

        链表中的头结点的设置不是必需的。对于设置头结点的原因,有的时候是为了解决问题的需要或者方便,有的时候是为了简化链表的操作,使得诸如插入和删除操作在不同情况下尽可能统一而人为设置的,不是必需的。

10、线性表常用操作为,尾插入新元素,头删掉元素,若用链式存储,选择哪种链式结构提高时间效率?

        应该选择仅设置了尾指针(指针指向链表最后那个结点,不妨设为rear, 同时假设新元素对应的新结点指针为p)的单向循环链表。因为在链表中插人一个结点需要知道插人点的位置,把新结点插入在链表末尾,只需知道末尾链结点的指针,即依次执行语句p-> link= rear- > link; rear- > link= p;和rear=p;即可。而删除一个结点也只需要知道被删除结点直接前驱结点的位置,因此,删除链表第1个结点只需知道它的前驱结点的指针,而该指针就在末尾结点的指针域中。此时,依次执行语句q=rear- > link; rear- >link=q-> link; free(q);即可(q为临时指针变量)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值