大话数据结构第三章链表十个问题及解答

来源:互联网 发布:ubuntu安装golang1.7 编辑:程序博客网 时间:2024/06/03 20:13

                                                                                                    大话数据结构第三章链表十个问题及解答

 

1.什么是链表,它有哪几种物理结构?

  线性表是零个或多个元素的有序序列。

它分为顺序存储结构和链式存储结构:

  顺序存储结构指的是用一段地址连续的存储单元依次存储线性表的数据元素。

  链式存储结构除了要存储数据元素信息外,还要存储它的后续元素的地址。

 

 

2.数组长度与线性表长度的区别?

  数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的。

  线性表的长度是线性表中数据元素的个数,随着线性表的插入和删除,线性表的长度会发生变化。

  一般来说,线性表长度会小于等于数组的长度。

 

 

3.顺序存储结构线性表插入和删除算法的思路?

插入算法:

1)如果插入位置不合理,抛出异常。

2)如果线性表长度大于等于数组长度,抛出异常或动态增加容量。

3)从最后一个元素开始向前遍历到第i个元素,分别将它们都向后移动一个位置。

4)将要插入元素填到到第i个位置。

5)表长加一。

 

删除算法:

1)如果删除位置不合理,抛出异常。

2)取出删除元素。

3)i个元素开始向后遍历到最后元素,分别将它们都向前移动一个位置。

4)表长减一。

 

 

4.线性表顺序存储结构的优缺点?

线性表的顺序存储结构,在存、读取数据时,不管是在哪个位置,时间复杂度都是O(1)。而在插入或者删除时,时间复杂度都是O(n)

这也就是线性表的顺序存储结构比较适合存取数据,不适合经常插入和删除数据的应用。

优点:

1.无需为了表示表中元素之间的逻辑关系而增加额外的存储空间(相对于链式存储而言)。

2.可以快速的存取表中任意位置的元素。

缺点:

1.插入和删除操作需要移动大量的元素。

2.当线性表长度变化较大时,难以确定存储空间的容量。

3.容易造成存储空间的“碎片”(因为线性表的顺序存储结构申请的内存空间都以连续的,如果因为某些操作(比如删除操作)导致某个部分出现了一小块的不连续内存空间,因为这一小块内存空间太小不能够再次被利用/分配,那么就造成了内存浪费,也就是“碎片”)

 

 

5.头指针和头节点的区别?

头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针;

头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息,

首元素结点是指链表中存储线性表中第一个数据元素a1的结点。

 

 

6.什么是单链表?

指针域中存储的信息称为指针或链。

这两部分信息组成数据元素称为存储映像,或称为结点(Node)

n个结点链接成一个链表,即为线性表(a1, a2, a3,, an)的链式存储结构。

因为此链表的每个结点中只包含一个指针域,所以叫做单链表。

 

 

7.顺序存储结构与链式存储结构的区别?

1、链式存储结构的存储空间在逻辑上是连续的,但是在物理上是离散的;而顺序存储结构的存储空间在逻辑上是连续的,在物理上也是连续的。

2、链式存储存储密度小,但空间利用率较高;顺序存储存储密度大,但空间利用率较低。

3、顺序结构优点是可以随机读取元素,缺点是插入和删除元素要移动大量元素,它的存储空间固定,可扩展性差;对链式存储而言,插入和删除元素开销小,操作简便。可扩展性强。缺点是不适合查找。

 

 

8.什么是静态链表?它有什么优缺点?

用数组描述的链表称为静态链表。

优点:在插入和删除操作时,只需要修改游标,不需要移动元素,从而改善了顺序存储结构中要移动大量元素的不足。

缺点:没有解决连续存储分配带来的表长难以确定的问题,失去了顺序存储结构随机存取的特点。

 

 

9.什么是循环链表?

  讲单链表中终端节点的指针端由空指针改为指向头节点,就使整个单链表形成一个环,这种头尾相接的单链表就是循环链表。

 

 

10.什么是双向链表?它有什么好处?

  在单链表的每个结点中在设置一个指向其前驱结点的指针域,这种链表称为双向链表。

  好处:由于其良好的对称性,可以有效提高算法的时间性能,总的来说就是 空间换时间。

 

 

原创粉丝点击