数据结构与算法
1. 对于线性表的两种存储结构,如果有n个线性表同时并存,并且在处理过程中各表的长度会发生动态变化,线性表的总数也会自行改变,在此情况下,应选用哪一种存储结构?为什么?
选用链式存储结构,因为链式存储结构是用一组任意存储单元依次存储线性表中的各个元素,这个存储单元可以连续的也可是不连续的。对于元素的删除或插入操作,这种存储结构不需要移动元素,只需要修改指针即可,所以很容易实现表容量的扩充。
2. 线性表的两种存储结构各有哪些优缺点?
线性表具有两种存储结构:顺序存储结构和链式存储结构
(1). 顺序存储结构:相邻元素存放地址也相邻(物理与逻辑统一);需求内存中可用存储单元的地址必须是连续的
优点:存储密度大,易于查找和修改
缺点:插入和删除元素不方便;存储空间利用率低,预先分配内存可能造成存储空间浪费
(2). 链式存储结构:相邻数据元素可随意存放,但所占存储空间分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
优点:插入和删除元素方便,使用灵活,存储空间利用率高
缺点:存储密度小, 查找需要遍历整个链表
3. 描述以下三个概念的区别:头指针,头结点,表头结查找点。
头指针:指向链表中第一个结点的指针
头结点:在表头结点之前附设的一个结点。该结点不存储数据元素,其指针指向表头结点
表头结点:链表中存储第一个数据元素的结点
4. 简述下列每对术语的区别:空串和空格串;串常量与串变量。主串和子串;串变量的名字和串变量的值。
空串:不包含任何字符的串,它的长度为0
空格串:由若干个空格组成的字符串,它的长度不为0
串变量:可以取不同字符串值的变量
串常量:只能引用但不能修改值的字符串
主串:包含子串的串
子串:串中任意个连续的字符组成的子序列
串变量的名字:该串的首地址,即第一个字符的地址
串变量的值:指变量中存放的字符串
5. 什么是队列的上溢现象?一般有几种解决方法,试简述之。
在队列的顺序结构中,设队头指针为front,队尾指针为rear,队列的容量(即存储空间大小)为maxnum。当有元素要加入队列时,若rear==maxnum则会发生队列的上溢现象,此时就不能将该元素加入队列。对于队列,还有一种“假溢出”现象,队列中尚余有足够的空间,但元素却不能入队,一般是由于队列的存储结构或操作方式的选择不当所致,可以用循环队列解决。
一般的,要解决队列的上溢现象有以下几种方法:
(1) 可建立一个足够大的存储空间以避免假溢出,但这样做往往会造成空间使用率低,浪费存储空间。
(2) 要避免出现“假溢出”现象可以使用以下方法解决:
第一种:采用移动元素的方法。每当有一个新元素入队,就将队列中已有的元素向队头移动一个位置,假定空余空间足够。
第二种:每当删除一个队头元素,则可依次移动队列中的元素总是使front指针指向队列中的第一个位置。
6. 简述静态分配的顺序串与动态分配的顺序串的区别。
串的存储也有静态存储和动态存储两种。
静态存储:指用一维数组存储字符串,通常一个字符占用一个字节,需要静态定义长度,可以理解为确定的存储空间,它的长度不可变。它具有顺序存储结构的优缺点。
动态存储:指在定义串时不分配存储空间,直到需要使用时按使用所需串的长度分配存储空间给它,并且在运行中还可以根据需要变化串的长度。