《数据结构》判断题中的错误表述
第1章 绪论:-
数据元素是数据的最小单位 ×
(数据元素是数据的基本单位,数据项是数据的最小单位) -
数据对象就是一组数据元素的集合 ×
(这里未强调数据元素的性质相同) -
任何数据结构都具备3个基本运算,即插入、删除和查找 ×
(队列的栈等数据结构并不具备查找运算) -
数据的逻辑结构与各数据元素在计算机中如何存储有关×
(数据的逻辑结构独立于计算机,与数据的存储无关;数据的存储结构依赖于计算机) -
如果数据元素值发生改变,则数据的逻辑结构也随之改变 ×
-
逻辑结构不相同的数据必须采用不同的存储方法来存储 ×
-
顺序存储方式只能用于存储线性结构 ×
-
算法可以用计算机语言描述,所以算法等同程序 ×
(程序=数据结构+算法) -
算法A和算法B用于求解同一问题,算法A的最好时间复杂度为O(n),而算法B的最坏时间复杂度为O(n³),则算法A好于算法B ×
(通常用两个算法的平均时间复杂度进行时间性能比较) -
一个算法的空间复杂度为O(1),表示执行该算法不需要任何临时空间 ×
(一个算法的空间复杂度为O(1),表示执行该算法所需要的临时空间大小与问题规模无关)
-
在一个含有n(n≥1)个元素的线性表中,所有元素值不能相同 ×
-
顺序表具有随机存取特性,所以查找值为x的元素的时间复杂度为O(1) ×
(查找的时间复杂度为O(n),修改/读取的时间复杂度为O(1)) -
线性表(含n个元素)的基本运算之一是删除第i个元素,其中i的有效取值范围是0≤i≤n-1 ×
(基本运算中的元素序号i是指逻辑序号,从1开始,这里的有效取值范是1≤i≤n;数组的下标是从0开始的) -
顺序表采用一维数组存放线性表中的元素,所以顺序表与一维数组是等同的×
(顺序表要求所有元素连续存储,而一维数组不必这样,另外,一维数组只有存、取元素操作,而顺序表可以插入、删除元素,所以两者不能等同) -
线性表的顺序存储表示属于静态结构,而链式存储表示属于动态结构 ×
(所谓静态结构是采用固定大小的静态分配方式得到的结果,如“ int a[10]语句就是一种静态分配方式。所谓动态结构是采用动态分配方式得到的结果,如"int*p=(int*)malloc(n*sizeof(int));”语句就是一种动态分配方式。对于链式存储结构,通常采用动态分配方式,而对于顺序存储结构,既可以采用静态分配方式,也可以采用动态分配方式,只不过为了简单,顺序存储结构通常采用静态分配方式) -
在含有n个结点的单链表L中,将p所指结点(非首结点)与其前驱结点交换,时间复杂度为O(1) ×
(时间复杂度为O(n),需要循环遍历找到其前驱结点,修改其指向下一个结点的指针) -
在循环单链表中,从表中任一结点出发都可以通过指针前后移动操作遍历整个循环链表 ×
(单链表只能按从前向后一个方向遍历;双链表可以按从前向后、从后向前两个方向遍历) -
在含有n个结点的循环单链表L中删除p所指结点(非首结点)的前驱结点,时间复杂度为O(1) ×
(时间复杂度为O(n),需要循环遍历找到其前驱结点,然后修改相应的指向下一个结点的指针) -
分配给一个单链表所有结点的内存单元地址必须是连续的 ×
(当线性表采用链式存储结构时,各结点之间的地址连续与否都可以) -
与顺序表相比,在链表中顺序访问所有结点,其算法的效率比较低 ×
(二者都需要从头开始遍历,对应的时间复杂度为O(n),效率是相同的) -
从长度为n的顺序表中删除任何一个元素所需要的时间均为O(n) ×
(删除最后一个元素时,时间复杂度为O(1)) -
空的单链表不含有任何结点 ×
(带头结点的单链表为空时仍有一个头结点) -
在双链表中删除一个结点(非尾结点),需要修改4个指针域 ×
(删除操作修改2个指针;插入操作修改4个指针) -
要想在O(1)的时间内访问尾结点,应采用循环单链表存储结构 ×
(应采用循环双链表。循环单链表访问尾结点的时间复杂度为O(n)) -
顺序存储结构的特点是存储密度大且插入、删除运算的效率高 ×
(顺序表进行插入和删除操作,平均情况下需要移动一半的数据元素,效率低) -
线性表的顺序存储结构总是优于链式存储结构 ×
(在存储密度上,顺序存储结构占有优势;在插入、删除操作时,链式存储结构占有优势。二者各有其优缺点,不能一概而论。) -
由于顺序表需要一整块连续的存储空间,所以存储空间利用率高 ×
(由于顺序表需要一整块连续的较大存储空间,当在存储器中出现比较多的碎片时,这些碎片空间可能得不到应用,所以存储空间利用率低) -
在双链表中删除一个结点p的前驱结点所花费的时间是O(n) ×
(时间复杂度为O(1),使用双链表能够快速的找到某个结点的前驱结点)
-
栈底元素是不能删除的元素 ×
(栈底元素可以出栈即删除) -
顺序栈中元素值的大小是有序的 ×
(顺序栈和链栈表示两种不同的存储结构,"顺序"不代表元素值是有序的) -
若用data[1…m]表示顺序栈的存储空间,则对栈的进、出栈操作最多只能进行m次 ×
(进、出栈可以无限次进行,前提是进栈前栈不为满,出栈前栈不为空) -
栈是一种对进栈、出栈操作总次数做了限制的线性表 ×
(栈是一种操作受限的线性表,指的是栈只能在一端进行插入和删除,而进栈、出栈操作可以反复进行) -
空的顺序栈没有栈顶指针 ×
(空栈指栈中没有元素,但顺序栈一定要有栈顶指针) -
若用不带头结点的非循环单链表来表示链队,则可以用“队首指针和队尾指针的值相等”作为队空的标志 ×
(应该用“队首指针和队尾指针的值均为NULL”作为队空的标志,因为当链队中只有一个结点时队首指针和队尾指针的值也相等) -
栈和线性表是两种不同的数据结构,它们的数据元素的逻辑关系也不同 ×
(栈是特殊的线性表) -
有n个不同的元素通过一个栈,产生的所有出栈序列恰好构成这n个元素的全排列 ×
(如:1,2,3三个元素的全排列为:1,2,3/1,3,2/2,1,3/2,3,1/3,1,2/3,2,1,共321=6种,但出栈元素不可能为3,1,2) -
在顺序栈中,将栈底放在数组的任意位置不会影响运算的时间性能 ×
(在顺序栈中,如果将栈底放在数组的两端,其进栈、出栈运算的时间性能都是最好的。如果将栈底放在数组的中间,要么将数组改为循环的(需要保存该栈底的位置),要么移动元素,其时间性能都不如将栈底放在数组两端) -
环形队列不存在空间上溢出的问题 ×
(环形队列只是不存在假溢出,它仍然存在上溢出的问题) -
若用s[1…m]表示顺序栈的存储空间,以s[1]为栈底,变量top指向栈顶元素的前个位置,当栈未满时,将元素e进栈的操作是 t o p − − ; s [ t o p ] = e top--;s[top]=e top−−;s[top]=e ×
(以s[1]为栈底,进栈操作时top应远离栈底方向移动,所以进栈操作为 " s [ t o p ] = e ; t o p + + " "s[top]=e;top++" "s[top]=e;top++") -
对于链队,可以根据队头、队尾指针的值计算队中元素的个数 ×
(应该是环形队列而不是链队)



