A. 线性表采用链式存储时,结点的存储地址是连续的吗
用任意的一组存储单元来存放线性表的结点,不同组的存储单元既可以是连续的,也可以是不连续的。
线性表有顺序表和链表两种存储结构。
顺序表:线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。
链表:用一组任意的存储单元来存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的
(1)线性表在物理存储空间必须连续吗扩展阅读:
线性表分类:
我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。
在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。
线性表优点:
线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。
参考资料:网络——线性表
B. 用顺序表来存储线性表时,不需要另外开辟空间来保存数据元素之间的关系。 线性表采用顺序存储,必须占用
“线性表采用顺序存储,必须占用一片连续的存储单元。”这就是顺序存储,逻辑地址相邻的元素物理地址也相邻,如果能理解这个就能理解下一句话了。
"不需要另外开辟空间来保存数据元素之间的关系。"的意思是只存储元素值就好了,因为链式存储是要用指针来指示后继或前趋的。
整个的意思就是顺序存储占用物理地址连续的一块空间来存储元素,元素之间的关系就是相邻元素间的关系。说顺序存储是相对链式存储的,链式存储占用的物理地址可连续可不连续,所以要找到某个元素的后继必须用指针来指示。
C. 什么是线性表线性表有哪两种存储结构它们是如何存储数据元素的各有什么优点
线性表:有n(n>0)的数据元素a1,a2,a3,.....,an组成的有限序列。
两种存储结构:
顺序存储结构:存取较快,插入删除较麻烦。
链式存储结构:存取较慢,插入删除叫简单。
存储数据元素:
顺序存储结构:直接存取。优点空间连续,位置明确。
链式存储结构:由于链表特征,需要从表头扫面。优点空间分散,位置不明确。
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的,注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表。
(3)线性表在物理存储空间必须连续吗扩展阅读:
线性表中的个数n定义为线性表的长度,n=0时称为空表。在非空表中每个数据元素都有一个确定的位置,如用ai表示数据元素,则i称为数据元素ai在线性表中的位序。
线性表的相邻元素之间存在着序偶关系。如用(a1,…,ai-1,ai,ai+1,…,an)表示一个顺序表,则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。
当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱。
D. 线性表采用顺序存储,是否必须占用一片连续的存储单元
是的
线性表的顺序存储相当于用数组存储
它的内存单元是连续的
E. C中线性表和链表的区别
最近经常听到朋友面试有被问到链表的问题,自己也总结了一下,应该算是比较入门向的介绍吧
线性表(数组)
数据与元素一一对应 除了第一个和最后一个其他数据元素首位相接
顺序表
线性表中用地址连续的存储单元来存放数据元素的数据结构,结点放在地址连续的存储单元中(实现方式为数组)——
链表
①物理存储单元上非连续,非顺序的存储结构(内存之中不连续)
②数据元素之间的逻辑顺序是通过链表中的指针链接次序实现
③链表由一系列结点组成(链表中的元素称为结点),结点可以在运行时动态生成
④结点包括两个部分:1.存储数据元素的数据域
2.存储下一个结点地址的指针域
(实现方式为指针)
ps1:尾结点 指针域为null,若尾结点指针指向首结点,那么构成环形链表
相对于 线性表 的优势
①链表比较方便插入和删除操作,线性表中插入一个元素,那么后面的元素地址都要往后移,删除同理。而链表只需要修改结点中的指针信息,不需要修改结点地址。
②线性表在建立时就确定的总长度 因此初始长度过大或者过小都会引起内存问题:如果内存中没办法一次性给出整个线性表所需的存储空间那么就会提示内存不足,链表可以用分散的存储空间
③链表的扩展性比线性表(数组)好,一个线性表在建立后空间大小是固定的,要扩展只能新建一个更大的,而链表可以很方便的扩展
线性表相对于链表的优势
①线性表存储空间小,因为链表要在存储单元里放一个或者两个指针(双向链表)
②线性表内容可以随机访问,因为是连续的内存单元,地址连续所以在这个区间内可以进行随机,链表存储地址
③查找速度由于存储地址原因也快于链表
双向链表
一句话 结点中有两个指针 一个指针指向直接前驱,一个指针指向直接后继
优势:查找更方便,用于大量数据的遍历
相对于单向 存储空间也更大
F. 关于数据结构的题
( × )1. 链表的每个结点中都恰好包含一个指针。
答:错误。链表中的结点可含多个指针域,分别存放多个指针。例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。
( × )2. 链表的物理存储结构具有同链表一样的顺序。
错,链表的存储结构特点是无序,而链表的示意图有序。
( × )3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
错,链表的结点不会移动,只是指针内容改变。
( × )4. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
错,正好说反了。顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”
( × )5. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
错,前一半正确,但后一半说法错误,那是链式存储的优点。顺序存储方式插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。
( × )6. 线性表在物理存储空间中也一定是连续的。
错,线性表有两种存储方式,顺序存储和链式存储。后者不要求连续存放。
( √ )7. 栈和队列的存储方式既可是顺序方式,也可是链接方式。
( √ )8. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
( × )9. 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。 错,后半句不对。
( × )10. 一个栈的输入序列是12345,则栈的输出序列不可能是12345。 错,有可能。
G. 线性表链式存储结构和顺序存储结构的存储空间一定连续吗
不一样,线性存储每个元素只要存元素的内容,链式存储还需要多一块区域来存储相邻节点的地址
H. 线性表采用链表存储时,结点之间和结点内部的存储空间可以是不连续的。 C++里,这句话对不对 结点
正确。队列先进先出的栈是先进后出的它们都是线性表线性表是最基础、最常用的数据结构,线性表中数据元素都是一对一的对应关系。可以不连续,存储空间分两段,一段存放数据,另一段存放着地址。
顺序存储需要开辟一个定长的空间,读写速度快,缺点不可扩充容量(如果要扩充需要开辟一个新的足够大的空间把原来的数据重写进去)。
(8)线性表在物理存储空间必须连续吗扩展阅读:
物理位置相邻表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。链式表示指的是用一组任意的存储单元存储线性表中的数据元素,称为线性表的链式存储结构。
存储单元可以是连续的,也可以是不连续的。在表示数据元素之间的逻辑关系时,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息,这两部分信息组成数据元素的存储映像,称为结点。
I. 线性链表的地址必须是连续的,为什么呢
是吗?我记得线性链表逻辑上是连续的,物理地址上可以不连续。链表的出现就是为了解决占用大面积的连续物理地址,导致内存使用不均匀。