考点所在范围:第二章线性表,链式存储
线性表是考研命题的重点。这类算法题实现起来比较容易而且代码量较少,但却要求具有最佳的性能(时间复杂度和空间复杂度),才能获得满分。
一个链表最常用的操作是在末尾插入结点和删除结点,则选用()最节省时间
知识点扩展:几种链表的定义1.单循环链表:是指通过一组任意的存储单元来存储线性表中的元素。为了建立数据元素之间的线性关系,对每个链表结点,除存放元素自身的信息外,还需要存放一个指向其后继的指针。缺点:只有一个指向其后继的指针,使得单链表只能从头结点依次顺序地向后遍历。要访问某个结点的前驱结点(插入、删除操作需要)时,只能从头开始遍历,访问后继结点的时间复杂度为O(1),访问前驱结点的时间复杂度O(n)2.双链表:仅在单链表的结点中增加了一个指向其前驱的prior指针,因此在双链表中执行按值查找和按位查找的操作与单链表相同。但在插入和删除的实现上,与单链表有较大的不同。引入目的:克服单链表的缺点以方便查找某个结点的前驱元素。3.循环单链表:循环单链表和单链表的区别在于,表中最后一个结点的指针不是NULL,而改为指向头结点,从而整个链表连成一个环。优点:正因为循环单链表是一个“环”,因此在任何一个位置上的插入和删除操作都是等价的,无须判断删除位置是否是表尾结点(单链表删除表尾结点和其他结点有区别)。4.循环双链表:由循环单链表不难推出循环双链表,不同的是在循环双链表中,头结点的prior指针还要指向表尾结点。5.静态链表:静态链表借助数组来描述线性表的链式存储结构,结点也有数据域data和指针域next,与前面链表的指针不同的是,这里的指针是结点的相对地址(数组下标),又称游标。正因为是借助数组实现的,因此和顺序表一样,静态链表也要预先分配一块连续的内存地址。缺点:易扩展性差,没有单链表用起来方便优点:在不支持指针的语言中是一种巧妙的设计方法(如Basic语言)答案解析:此题答案:D,分析题目,要快速在插入和删除结点,链表插入和删除操作的关键点是要找出要操作结点的前一个结点,在此题目中为倒数第二个结点,因此只能是双向循环结构,带头结点是为了方便找到头,因为双向链表一旦循环并且没有头结点的话,每个结点在逻辑上都可称之为头。找尾排除ABC,E为迷惑选项,若改为带倒数第二个结点指针的单循环链表也对,并且效率比带头结点的双向循环链表还要高。往期推荐
考研数据结构每日一题-day1考研数据结构每日一题-day2考研数据结构每日一题-day3考研数据结构每日一题-day4考研数据结构每日一题-day5—END—我就知道你“在看”程序员的这些事