链表存储结点内部可以不连续吗
⑴ 链表存储的优缺点
链表优点和缺点如下:
优点:在插入和删除操作时,只需要修改被删节点上一节点的链接地址,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。
缺点:
1、没有解决连续存储分配带来的表长难以确定的问题。
2、失去了顺序存储结构随机存取的特性。
(1)链表存储结点内部可以不连续吗扩展阅读:
线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
根据情况,也可以自己设计链表的其它扩展。但是一般不会在边上附加数据,因为链表的点和边基本上是一一对应的(除了第一个或者最后一个节点,但是也不会产生特殊情况)。
对于非线性的链表,可以参见相关的其他数据结构,例如树、图。另外有一种基于多个线性链表的数据结构:跳表,插入、删除和查找等基本操作的速度可以达到O(nlogn),和平衡二叉树一样。
其中存储数据元素信息的域称作数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)。指针域中存储的信息又称做指针或链。
⑵ 线性链表各个数据节点存储空间必须连续吗
存储空间不需要连续,所以才通过指针相连
⑶ 分配给单链表的内存储单元地址必须是连续的吗
当然不是,单链表的优点就在于灵活性和散列性,每个点的内存地址都可以是任意
⑷ 连续存储数据时,存储单元的地址()A.一定连续 B一定不连续 C不一定连续 D部分连续
A。
链式存储,存储空间可以不连续,但存储地址必连续。
链式存储设计时,各个不同结点的存储空间可以不连续,但是结点内的存储单元地址则必须连续。
typedef struct LNode {
int value; // value中存放结点值域,默认是int型
struct Lnode *next;//指向后继结点的指针
}LNode; // 定义单链表结点类型
上述定义了一个结构体,包括两部分,一是值域,二是指针域;每当定义一个结点都会产生这两个区域。
这个value与next域必须是挨着的,称这个结点为内部。
(4)链表存储结点内部可以不连续吗扩展阅读:
由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
⑸ 数据结构高手来帮忙(简答题、算法题)
1、顺序存储方式只能用于存储线性结构。( N )
2、数组不枝闷纳适合作为二叉树的存储结构。( N )
3、串是一种数据对象和操作都特殊的线性表。( Y )
4、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( Y )
5、栈和队列都是限飞过海英语角制存取点的线性结构。( Y )
6、一个广义表可以为其它广义表所共享。( N )
7、树的度是指树内结点的度。( Y )
8、一棵一般树的结点的 根次序遍历和后根次序遍历分别与其相应二叉树的结点前序遍历但是和后序就几号回家豫剧遍历是一致的。( N )
9、无向图的邻接矩阵一定对称矩阵,有向图的邻接矩阵一定是非对称矩阵。( N )
10、排序算法中的比较次数与初始元素序列的排列无关。( X )
1、 设目标串t=“abaabcc”,模式串P=“aabc”,试描述根据穷举模式匹配算法进行匹配的过罩脊程。
abaabcc
aabc d=0, fail
aabc d=1, fail
aabc d=2, success, return 2
2、 设用于通讯的电文法由8个字母组成,字母在电文中出现的频率分别为7,9,2,6,32,3,21,10,试为这8个字母设计不等长Huffman编码,并给出该电文的总码数(要求画出猛没Huffman编码数)。
假设:
a:7 b:9 c:2 d:6 e:32 f:3 g:21 h:10
排序:
(c:2) (f:3) (d:6) (a:7) (b:9) (h:10) (g:21) (e:32)
按优先级合并:
((c[0],f[1]):5) (d:6) (a:7) (b:9) (h:10) (g:21) (e:32)
(a:7) (b:9) (h:10) (((c[00],f[01]),d[1]):11) (g:21) (e:32)
(h:10) (((c[00],f[01]),d[1]):11) ((a[0],b[1]):16) (g:21) (e:32)
((a[0],b[1]):16) ((h[0],((c[100],f[101]),d[11])):21) (g:21) (e:32)
(g:21) (e:32) (((a[00],b[01]),(h[10],((c[1100],f[1101]),d[111]))):37)
(((a[00],b[01]),(h[10],((c[1100],f[1101]),d[111]))):37) ((g[0],e[1]):43)
((((a[000],b[001]),(h[010],((c[01100],f[01101]),d[0111]))),(g[10],e[11])):80)
a:000 3*7=21
b:001 3*9=37
c:01100 5*2=10
d:0111 4*6=24
e:11 2*32=64
f:01101 5*3=15
g:10 2*21=42
h:010 3*10=30
⑹ 循环链表的存储空间是连续的,为什么错
循环链表是由单链表的最后一个结点指针不指向null,而是指向头结点而成。因此我们分析单链表的存储结构。
单链表是通过一组任意的存储单元存储线性表中的元素的。 这是单链表的定义。单链表的存储单元是任意的!! 没有说要连续。
连续的只有顺序表!顺序表!顺序表!
顺序表是用一组地址连续!!的存储单元,依次!!存储线性表中的数据元素。
而循环链表 它的定义前面已经说了,只是最后一个结点不为null(空),而是指向链表的头结点哦。
循环链表也是链表,链表的存储空间不一定连续的。
但是顺序表是一定连续的存储空间哦。
⑺ 链式存储设计结点内的存储单元地址为什么要连续
链式存储设计时,各个不同结点的存储空间可以不连续,但是结点内的存储单元地址则必须连续。
typedef struct LNode {
int value; // value中存放结点值域,默认是int型
struct Lnode *next;//指向后继结点的指针
}LNode; // 定义单链表结点类型
上述定义了一个结构体,包括两部分,一是值域,二是指针域;每当定义一个结点都会产生这两个区域。
这个value与next域必须是挨着的,称这个结点为内部。
假如我们定义若干个不同的结点,把它们连接起来成为一个单链表。
value区域,箭头区域则是指针域指向逻辑上相链接的下一个结点,但是它们在空间上不一定连续。
而对于它们的结点内部一定是连续的。若第一个结点占用两个地址,那么value域的起始地址是1,则指针域的地址就是2。同理若第二个结点的value地址是10,则next域就是11。
因此,在进行链式存储设计时,各个不同结点完全可以存储在不连续的空间上,而对于同一个结点内部,不论划分多少个区域,两个也好,三个也罢,总之内部的单元存储地址是连续的。
⑻ 线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的
简单来讲,就是键裤内存稿拦简空间的分配是每一个节点都会new一个空间出来,具体在哪里要看当时的内存空间的状态。顺序表的话是一次性开辟出衡告来整个空间,所以是顺序存储的。
⑼ 线性表采用链式存储时,结点的存储地址是连续的吗
用任意的一组存储单元来存放线性表的结点,不同组的存储单元既可以是连续的,也可以是不连续的。
线性表有顺序表和链表两种存储结构。
顺序表:线性表的结点按逻辑次序依次存放在一组地址连续的存储单兆首渣元里的方法。
链表:用一组任意的存储单元来存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的
(9)链表存储结点内部可以不连续吗扩展阅读:
线性表分类:
我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。
在数据结构逻辑层次芹游上细分,线性族悄表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。
线性表优点:
线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。
参考资料:搜狗网络——线性表
⑽ 链表 判断题,请解释一下
3题:利用链表存储数据的最大优点(比数组一类的存储结构来说)就是存储空间郑源不是连续的,因为链表有next指针,可以指向下一个节点圆绝,喊腔态所以可以不是连续的
6题:“线性存储包括顺序储存”应该是对的