C习题-链表02

发布时间 2023-08-02 20:09:51作者: 冲他丫的

1、设数据结构 B=(D, R) ,其中D={ a, b, c, d, e, f }、 R={ (a, b ) , (b, c ) , (c, d ) , (d, e), (e, f), (f, a) },该数据结构为( )。

A、非线性结构
B、循环队列
C、循环链表
D、线性结构
答案:A;
图是非线性结构;
线性结构:一对一,除第一个与最后一个数据元素外,其他每个有且仅有一个直接前驱和直接后继;
数据的逻辑结构有两个要素:一是数据元素的集合,通常记为 D ;二是 D 上的关系,它反映了 D 中各数据元素之间的前后件关系,通常记为 R 。即一个数据结构可以表示成 B= ( D,R )。其中 B 表示数据结构。为了反映 D 中各数据元素之间的前后件关系,一般用二元组来表示。例如,假设 a 与 b 是 D 中的两个数据,则二元组( a,b )表示 a 是 b 的前件, b 是 a 的后件。 如果一个非空的数据结构满足下列两个条件:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。如果一个数据结构不是线性结构,则称之为非线性结构。 本题数据结构中没有根结点,因此它是非线性结构.
 
2、解析XML时,需要校验节点是否闭合,如必须有与之对应,用()数据结构实现比较好
A、链表
B、树
C、队列
D、栈
答案:D;鉴于XML的标签是成对出现的,所以为了检验成对性,需要与后一个相比较,那也就是数据结构中所谓的:后进先出,也就是栈。
 
3.带头结点head的单向循环链表L为空的判断条件是(   )
A、head==NULL
B、head->next==NULL
C、head->next==head
D、head!=NULL
答案:C;循环链表带头结点,头结点不算链表内容,如果头结点的下指针指向它本身,那么很明显,这个循环链表没有内容,就是空了。
 
4.将长度为n的单链表链接在长度为m的单链表后面,其算法的时间复杂度釆用大O形式表示应该是( )
A、O(1)
B、O(n)
C、O(m)
D、O(n+m)
答案:C;需要先遍历长度为m的单链表,找到链表尾部,然后用尾部指针指向长度为n单链表的头结点。
所以时间复杂度只与长度为m的单链表有关,时间复杂度为O(m)。
 

5、当静态链表采用数组实现时,插入与删除操作仍需移动元素,这种说法()
A、正确
B、错误
答案:B;在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标CUR。
优点:和动态链表一样,删除和插入元素时间复杂度低,只需改动游标,不需移动元素(因此本题错误) 不足:和数组一样,需要提前分配一块较大的空间;失去了顺序存储结构随机存取的特性。
 
6、从一个具有 n 个结点的单链表中查找其值等于 x 结点时,在查找成功的情况下,需平均比较( )个结点。
A、n
B、n/2
C、(n-1)/2
D、(n+1)/2
答案:D;最少1次  最多n次  平均(n+1)/2次