1.具体衡量、比较算法优劣的指标主要有哪两个?什么是时间复杂度?什么是空间复杂度?
时间复杂度T(n): 根据算法写成的程序在执行时耗费时间的长度。
这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果。
空间复杂度S(n):根据算法写成的程序在执行时占用存储单元的长度。
这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。
2.解释一下顺序存储和链式存储,顺序存储结构和链式存储结构的优点。
顺序存储结构:借助元素在存储器中的相对位置表示数据元素之间的关系。
在计算机中用一组地址连续的存储单元依次存储各个数据元素。
链式存储结构:借助指示元素存储地址的指针(Pointer)表示数据元素之间的逻辑关系。
用一组任意的存储单元存储数据元素(这组存储单元可以是连续的也可以是不连续的)。无需占用一整块存储空间,为了表示节点间的关系,需要给每个结点附加指针字段,存放后继元素存储位置。
优缺点
① 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大(=1),存储空间利用率高。缺点:插入或删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小(<1),存储空间利用率低。
3,如何判断链表有环?
判断链表是否存在环的方法有多种,我们可以通过使用快慢指针来进行判断。
具体步骤如下:
-
定义两个指针,一个快指针(fast)和一个慢指针(slow);
-
初始时,快指针和慢指针都指向链表的头节点;
-
快指针每次移动两步,慢指针每次移动一步;
-
如果存在环,那么快指针和慢指针最终会相遇;如果不存在环,那么快指针会先到达链表的末尾节点。
通过这种方式,我们可以判断链表是否存在环。
4.头指针和头结点的区别。
- 头指针:头指针是一个普通的指针,它始终指向链表中的第一个节点(如果链表有头结点,则指向头结点;如果没有头结点,则指向链表的第一个数据节点)。头指针用于标识链表的位置,便于后期找到链表并使用表中的数据。无论链表是否为空,头指针都需要存在,但它本身的值(即指向的节点)可以变化,甚至可以为空(表示链表为空)。
- 头结点:头结点是为了操作的统一和方便而设立的,它位于链表的第一个数据节点之前,是一个不存储有效数据的虚拟节点(尽管有时其数据域也会用来存储链表的长度等信息)。头结点的存在使得对链表第一个节点的插入、删除等操作变得统一和方便,同时也使得空表和非空表的处理变得一致。