‘壹’ 一个顺序表所占用的存储空间什么有关
和存储的元素个数有关,也和每个元素所占空间有关
‘贰’ 线性表中所有的元素所占的存储空间是连续的,是什么意思
线性表中有链表和顺序表两类,顺序表所占的存储空间必须连续,链表没有这个要求,连续指的是存储空间的连续,顺序存储结构中,线性表中每一个数据元素在计算机存储空间中的存储地址由该元素在线性表中的位置序号唯一确定。
线性表是最常用的数据结构,它由一组数据元素组成。
注意:这里的数据元素是一个广义的数据元素,并不仅仅是指一个数据。如,矩阵、学生记录表等。
非空线性表的结构特征:
有且只有一个根结点,它无前件
有且只有一个终端结点,它无后件
除根结点和终端结点之外,所有的结点有且只有一个前件和一个后件。线性表中结点的个数称为结点的长度n。当n=0时,称为空表。
‘叁’ 线性表的链式储存结构与顺序储存结构所需要的空间是相同的吗
顺序存储需要开辟一个定长的空间,读写速度快,缺点不可扩充容量(如果要扩充需要开辟一个新的足够大的空间把原来的数据重写进去)
链式存储无需担心容量问题,读写速度相对慢些,由于要存储下一个数据的地址所以需要的存储空间比顺序存储大。
我感觉java数据结构没有c、c++来的重要。
‘肆’ 线性表的链式存储结构与顺序存储结构所需的存储空间一样吗
不一样,线性存储每个元素只要存元素的内容,链式存储还需要多一块区域来存储相邻节点的地址
‘伍’ 链接存储的存储结构所占存储空间_______。
写在前面的话:数据结构很多人都是只看不去实战,这样很难取得很好的效果,我会在每个知识点下面配套几道从Leetcode和剑指offer上找到的经典题目(比如本章说完链表以后,会配套LeetCode.206等题目)。
程序这种东西还是多敲键盘比较好,纸上得来终觉浅,绝知此事要躬行。
数据结构中的线性表 是理解图,堆栈,二叉树的基础,他的官方定义为:
线性表 是 零个或多个数据元素的有限序列。
比如:a1, a2, a3 ,a4, ...... , ai-1, ai, ai+1,....., an
ai-1 是ai的前驱元素,而ai+1是ai的后继元素。我们可以得知,当i=2, ...., n-1时,他们只有唯一的一个前驱元素和后继元素。
并且,在线性表中,a1~an所代表的元素必须是相同的数据类型的元素。(比如a1-an代表有n个不同类型的人,但他们都是人,你不能在其中添加一个帽子的存储)。
线性表在物理结构上可以分为:顺序存储结构和链表存储结构。
第一节:首先我们了解下顺序存储结构:
顺序存储结构就是在内存空间中开辟一片连续的空间,然后把数据按照顺序进行存储的一种方式。
他包含三个属性:1、存储空间的起始位置(也就代表我们定义了一个数组)2、最大的存储容量(数组最大长度)3、线性表的当前长度
属性2和3的区别是:数组的长度是基本不变的,这是我们在申请内存空间的时候就已经确定好的,而我们的线性表的长度是代表着元素个数,是不确定的长度。则两者的关系为: 线性表的当前长度<=数组长度;
1 顺序存储结构的插入与删除:
1.1、插入思路:
①、我们首先需要考虑异常(插入位置异常,插入后的长度异常等)
②、从最后一个元素遍历到插入位置,分别将每一个元素向后移动一个位置;
③、插入目标元素,表长加1;
1.2、删除思路:
①、我们仍然需要首先考虑异常(删除位置错误等)
②、查找到需要删除的位置,遍历将其后的每一个元素向前进行移动。
2 总结
我们可以看出,在插入算法中,顺序存储结构中元素在插入位置的过程中,多数元素都需要进行移动,来给插入的元素腾位置。并且,在删除算法中也是类似的道理。我们计算下他们的时间复杂度:顺序存储结构在读取数据的时候,因为可以按照list[index]进行读取,所以时间复杂度为O(1),但在插入和删除算法的时候,平均的时间复杂度为O(n);
我们可以看出顺序存储结构的优点和缺点:
优点是:不需要为表示元素之间的逻辑关系而增加额外存储空间,可以快速的存取表中的任一位置的元素。
缺点是:插入和删除操作需要移动大量的元素。当线性表变化较大的时候,难以确定存储空间的容量。
‘陆’ (1)下列叙述中正确的是 A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B)线性表
下列叙述中正确的是
A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D.上述三种说法都不对
正确答案:B。线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构。
‘柒’ 线性表采用链表存储时,结点之间和结点内部的存储空间可以是不连续的。 C++里,这句话对不对 结点
正确。队列先进先出的栈是先进后出的它们都是线性表线性表是最基础、最常用的数据结构,线性表中数据元素都是一对一的对应关系。可以不连续,存储空间分两段,一段存放数据,另一段存放着地址。
顺序存储需要开辟一个定长的空间,读写速度快,缺点不可扩充容量(如果要扩充需要开辟一个新的足够大的空间把原来的数据重写进去)。
(7)线性表所占的存储空间扩展阅读:
物理位置相邻表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。链式表示指的是用一组任意的存储单元存储线性表中的数据元素,称为线性表的链式存储结构。
存储单元可以是连续的,也可以是不连续的。在表示数据元素之间的逻辑关系时,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息,这两部分信息组成数据元素的存储映像,称为结点。
‘捌’ 链表中每个节点所占用的储存空间是连续的,但节点之间在空间上可以连续也可以不连续 对这句话不是很明白
一个链表有很多个节点,各个节点之间通过指针连接起来,所以各个结点之间的位置可以不连续,也就是可以放在不同的位置,所以在空间上可以是不连续的;但对于一个节点,因为节点内部是一个整体,所以就要占用连续的存储空间。
队列是先进先出的栈是先进后出的都是线性表线性表是最基础、最常用的数据结构,线性表中数据元素都是一对一的对应关系。可以不连续,它的存储空间分两段,一段存放数据,另一段存放着地址,链表是通过地址将数据串联起来的数组必须是连续的存储空间。
(8)线性表所占的存储空间扩展阅读:
一个链表或者多个链表使用独立的存储空间,一般用数组或者类似结构实现,优点是可以自动获得一个附加数据:唯一的编号,并且方便调试;缺点是不能动态的分配内存。当然,另外的在上面加一层块状链表用来分配内存也是可以的,这样就解决了这个问题。
这种方法有时候被叫做数组模拟链表,但是事实上只是用表示在数组中的位置的下标索引代替了指向内存地址的指针,这种下标索引其实也是逻辑上的指针,整个结构还是链表,并不算是被模拟的(但是可以说成是用数组实现的链表)。