Question one:线性表的物理结构是什么?
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
Question two:顺序存储方式是什么?
线性表的顺序存储结构,就是在内存中找了块地儿,通过占位的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次 存放在这块空地中。既然线性表的每个数据元素的类型都相同,所以可以用C语言 (其他语言也相同)的一维数组来实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。
Question three:描述顺序存储结构需要哪三个属性?
■ 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
■ 线性表的最大存储容量:数组长度MaxSize。
■ 线性表的当前长度:length。
Question four:数据长度与线性表长度区别?
数组的长度是存放线性表的存储空间的长度,存储分配后这个量是一般是不变的。一般高级语言,比如C、VB、C++都可以用编程手段实现动态分配数组,不过这会带来性能上的损耗。
线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
在任意时刻,线性表的长度应该小于等于数组的长度。
Question five:地址计算方法是什么?
起始也是1,可c 语言中的数组却是从0开始第一个下标的,于是线性表的第i个元素是要存储在数组 下标为i-1的位置,即数据元素的序号和存放它的数组下标之间存在对应关系
线性表的当前长度Length
| ai | a2 |
| ai-i | a; |
| 3n | 空闲空间| |
下标 | 0 | 1 | i-2 | i-l | n-1 |
|
数组的长度MaxSize
用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插 入和删除操作,因此分配的数组空间要大于等于当前线性表的长度。
存储器中的毎个存储单元都有自己的编号,这个编号称为地址。
由于每个数据元素,不管它是整型、实型还是字符型,它都是需要占 用一定的存储单元空间的。假设占用的是c个存储单元,那么线性表中第i+1个数据 元素的存储位置和第i个数据元素的存储位置满足下列关系(LOC表示获得存储位置的函数)
LOC(ai+1)=LOC(ai)+c
所以对于第i个数据元素ai的存储位置可以由a1推算得出:
LOC(ai)=LOC(ai)+(i-1)*c
通过这个公式,你可以随时算出线性表中任意位置的地址,不管它是第一个还是 最后一个,都是相同的时间。那么我们对每个线性表位置的存入或者取出数据,对于计算机来说都是相等的时间,也就是一个常数,因此用我们算法中学到的时间复杂度 的概念来说,它的存取时间性能为O(1)。我们通常把具有这一特点的存储结构称为随机存取结构。
Question six:获得元素怎么操作?
对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L 中的第i个位置元素值返回,其实是非常简单的。就程序而言,只要i的数值在数组下标范围内,就是把数组第i一 1下标的值返回即可。
Question seven:插入算法的思路是什么?
■ 如果插入位置不合理,抛出异常;
■ 如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
■ 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位 置;
■ 将要插入元素填入位置i处;
■ 表长加1
Question eight:删除算法的思路是什么?
■ 如果删除位置不合理,抛出异常;
■ 取出删除元素;
■ 从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一 个位置;
■ 表长减1。
Question nine:插入和删除的时间复杂度是什么?
先来看最好的情况,如果元素要插入到最后一个位置,或者删除最后一个元素, 此时时间复杂度为O(1),因为不需要移动元素的,就如同来了一个新人要正常排队, 当然是排在最后,如果此时他又不想排了,那么他一个人离开就好了,不影响任何 人。
最坏的情况呢,如果元素要插入到第一个位置或者删除第一个元素,此时时间复 杂度是多少呢?那就意味着要移动所有的元素向后或者向前,所以这个时间复杂度为 O(n〕。
至于平均的情况,由于元素插入到第i个位置,或删除第i个元素,需要移动n—i 个元素。根据概率原理,每个位置插入或删除元素的可能性是相同的,也就说位置靠 前,移动元素多,位置靠后,移动元素少。最终平均移动次数和最中间的那个元素的 移动次数相等,为(n-1)/2.
Question ten:线性表顺序存储结构的优缺点是什么?
优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间。
可以快速地存取表中任一位置的元素。
缺点:插入和删除操作需要移动大量元素。
当线性表长度变化较大时,难以确定存储空间的容量
造成存储空间的“碎片”。