单选题 设单链表中结点的结构为
Typedef struct.node{ //链表结点定义
ElemType data; //数据
struct node*link; //结点后继指针
}LinkedNode;
单选题 不带头结点的单链表first为空的判定条件是______。
【正确答案】 A
【答案解析】
单选题 带头结点的单链表first为空的判定条件是______。
【正确答案】 B
【答案解析】
单选题 已知单链表中结点 * q是结点 * p的直接前驱,若在 * q与 * p之间捅入结点 * s,则应执行以下______操作。
【正确答案】 B
【答案解析】
单选题 已知单链表中结点 * p不是链尾结点,若在 * p之后插入结点 * s,则应执行下列______操作。
【正确答案】 D
【答案解析】
单选题 若想在单链表中摘除结点 * p( * p既不是第一个也不是最后一个结点)的直接后继,则应执行以下______操作。
【正确答案】 A
【答案解析】
单选题 非空的循环单链表first的链尾结点(由p所指向)满足______。
【正确答案】 A
【答案解析】
单选题 设rear是指向非空的带表头结点的单循环链表的链尾结点的指针。若想删除链表第一个结点,则应执行以下______操作。
【正确答案】 D
【答案解析】
单选题 设双向循环链表中结点的结构为(data,lLink,rLink),且不带表头结点。若想在结点 * p之后捅入结点 * s,则应执行以下______操作。
【正确答案】 D
【答案解析】[解析] (1)(2)若单链表不带表头结点, * first即为首元结点(第一个结点),链表为空即first为空;若单链表带有表头结点, * first即为表头结点,链表为空即表头结点后面没有首元结点,first->link为空。
(3)已知单链表中结点 * q是结点 * p的直接前驱,若在 * q与 * p之间插入结点 * s,需要把 * s链接到 * q之后,把 * p链接到 * s之后:q->link=s;s->link=p。
(4)已知单链表中结点 * p不是链尾结点,若在 * p之后插入结点 * s,需要把原来 * p后的结点先链接到 * s之后,再把 * s链接到 * p之后:s->link=p->link;p->link=s。
(5)若想在单链表中摘除结点 * p( * p既不是第一个也不是最后一个结点)的直接后继,需要做重新链接工作,让 * p的后继的后继成为 * p的后继:p->link=p->link->link。
(6)非空的循环单链表first的链尾结点为 * p,则 * p的后继为空:p->link==NULL。
(7)设rear是非空带表头结点的单循环链表的链尾指针。若想删除链表第一个结点,必须先保存要删除的表头结点的后继结点地址:s=rear->link->link;再做重新链接工作,让 * s的后继链接到表头结点之后:rear->link->link=s->link;最后做删除:delete s。
(8)若想在不带表头结点的双向循环链表中的结点 * p之后插入结点 * s,需在两个链上做插入,插入过程中要小心,不要让其中任何一个链断掉。选项A和选项B首先排除,因为第一条语句p->rlink=s就让后继链断掉了,选项C和选项D前两条语句s->llink=p;s->rlink=p->rlink合理,让 * s的前驱、后继都链接好且未影响原来的两个链,但选项C的第三条语句p->rlink=s又断开了后继链,排除它就剩下选项D,它是对的。