‘壹’ 线性表的链式存储结构与顺序存储结构所需的存储空间一样吗
不一样,线性存储每个元素只要存元素的内容,链式存储还需要多一块区域来存储相邻节点的地址
‘贰’ 定义结构体时,结构体本身并不占用存储空间,系统并不给结构体分配存储空间,这句话对吗
不正确。
定义结构体时,系统按照各成员项的大小分配相应的存储空间。
‘叁’ 线性表两种 存储结构各自的优缺点有哪些
线性表的链式存储结构:
优点:
插入和删除不需要移动插入时只需要对插入位置后的一个元素进行操作,不需要大量的移动元素。空间有效利用高。
缺点:
大量访问操作时不如顺序存储结构,因为每次都需要从头开始遍历整个线性表直到找到相应的元素为止。
线性表的顺序存储结构:
优点:
可随机存取表中任一元素。因为有下标可以操作可以快速的定位到指定位置的元素,但是不知道位置的话也需要顺序遍历。
缺点:
插入或删除操作时,需大量移动元素。合适在很少进行插入和删除运算的情况下。
(3)线性表定义存储结构不占用空间吗扩展阅读:
线性表的特征
集合中必存在唯一的一个“第一元素”。
集合中必存在唯一的一个 “最后元素” 。
除最后一个元素之外,均有唯一的后继(后件)。
除第一个元素之外,均有唯一的前驱(前件)。
线性表的基本操作
MakeEmpty(L) 这是一个将L变为空表的方法。
Length(L) 返回表L的长度,即表中元素个数。
Get(L,i) 这是一个函数,函数值为L中位置i处的元素(1≤i≤n)。
Prior(L,i) 取i的前驱元素。
Next(L,i) 取i的后继元素。
Locate(L,x) 这是一个函数,函数值为元素x在L中的位置。
Insert(L,i,x)在表L的位置i处插入元素x,将原占据位置i的元素及后面的元素都向后推一个位置。
Delete(L,p) 从表L中删除位置p处的元素。
IsEmpty(L) 如果表L为空表(长度为0)则返回true,否则返回false。
Clear(L)清除所有元素。
Init(L)同第一个,初始化线性表为空。
Traverse(L)遍历输出所有元素。
Find(L,x)查找并返回元素。
Update(L,x)修改元素。
Sort(L)对所有元素重新按给定的条件排序。
strstr(string1,string2)用于字符数组的求string1中出现string2的首地址。
参考资料来源:网络-线性表
‘肆’ ”结构体定义时,结构体本身并不占用存储空间,系统并不给结构体分配存储空间。“这句话是对的吗
对的,结构体类型的定义只是告诉编译器该如何表示数据,但是它没有让计算机为其分配空间。结构体类型的定义就是结构体的声明,不管是定义还是申明,这句话都是正确的。
只有在结构体变量,声明的时候可以分配。要使用结构体,那么就需要创建变量,也就是结构体变量。
创建一个结构体变量:struct book library
看到这条指令,编译器才会创建一个结构体变量library,此时编译器才会按照book模板为该变量分配内存空间,并且这里存储空间都是以这个变量结合在一起的。
同时后面访问结构体变量成员的时候,就要用到结构体变量名来访问。
(4)线性表定义存储结构不占用空间吗扩展阅读:
结构体的大小通常是结构体所含变量大小的总和,但是对于结构体中比较小的成员,可能会被强行对齐,造成空间的空置,这和读取内存的机制有关,为了效率。
通常32位机按4字节对齐,小于的都当4字节,有连续小于4字节的,等到凑整,加上下一个元素超出一个对齐位置,才开始调整,比如3+2或者1+4,后者都需要另起(下边的结构体大小是8bytes)。
struct s
{
char a;
short b;
int c;
}
相应的,64位机按8字节对齐。
不过对齐不是绝对的,用#pragma pack()可以修改对齐,如果改成1,结构体大小就是成员变量大小的总和。
参考资料来源:网络--结构体
‘伍’ 线性表的存储结构,在什么情况下采用顺序结构为什么
看名字就差不多了吧
顺序存储结构就是用一组地址连续的存储单元依次存储该线性表中的各个元素。由于表中各个元素具有相同的属性,所以占用的存储空间相同。因此,在内存中可以通过地址计算直接存取线性表中的任一元素。这种结构的特点是逻辑上相邻的元素物理上也相邻。用顺序结构存储的线性表称作顺序表。
线性表按链式存储时,每个数据元素 (结点)的存储包括数据区和指针区两个部分。数据区存放结点本身的数据,指针区存放其后继元素的地址 (没有后继元素时设置为空字符(Null).。只要知道该线性表的起始地址 (记录在头指针中),表中的各个元素就可通过其间的链接关系逐步找到
‘陆’ 下列叙述中正确的是( )。 A. 顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是
一定是连续的 这个是顺序存储结构的定义.
在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构.
只要是链表,就是内存中随机存贮;只有数组这种静态的内存分配方式才是连续存贮的
‘柒’ 线性表中所有的元素所占的存储空间是连续的,是什么意思
线性表中有链表和顺序表两类,顺序表所占的存储空间必须连续,链表没有这个要求,连续指的是存储空间的连续,顺序存储结构中,线性表中每一个数据元素在计算机存储空间中的存储地址由该元素在线性表中的位置序号唯一确定。
线性表是最常用的数据结构,它由一组数据元素组成。
注意:这里的数据元素是一个广义的数据元素,并不仅仅是指一个数据。如,矩阵、学生记录表等。
非空线性表的结构特征:
有且只有一个根结点,它无前件
有且只有一个终端结点,它无后件
除根结点和终端结点之外,所有的结点有且只有一个前件和一个后件。线性表中结点的个数称为结点的长度n。当n=0时,称为空表。
‘捌’ 用顺序表来存储线性表时,不需要另外开辟空间来保存数据元素之间的关系。 线性表采用顺序存储,必须占用
“线性表采用顺序存储,必须占用一片连续的存储单元。”这就是顺序存储,逻辑地址相邻的元素物理地址也相邻,如果能理解这个就能理解下一句话了。
"不需要另外开辟空间来保存数据元素之间的关系。"的意思是只存储元素值就好了,因为链式存储是要用指针来指示后继或前趋的。
整个的意思就是顺序存储占用物理地址连续的一块空间来存储元素,元素之间的关系就是相邻元素间的关系。说顺序存储是相对链式存储的,链式存储占用的物理地址可连续可不连续,所以要找到某个元素的后继必须用指针来指示。
‘玖’ 1. 对于线性表的两种存储结构,如果要求存储空间利用率比较高,同时在处理的过程中,各表长度基本不变方便
频繁删除插入操作用链表
频繁查找用顺序表