第二章 作业答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章作业
1. 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
答:首结点就是存放数据元素的第一个元素结点,头结点是为了插入和删除的方便说增设的一个结点,头指针是指向链表中第一个结点的存储位置,在没有头结点的链表中,头指针指向链表中的首结点,在有头结点的链表中,头指针指向链表中的头结点。
2. 简述线性表的两种存储结构顺序表和链表的优缺点。
3. 已知 L 是无表头结点的单链表,且 P 是指向表中某个结点的指针,试写出在 P 所指结点之前插入指针 S 所指结点的语句序列。
P->next->next= P->next;
S->next = P;
4. 已知 P 是指向双向链表中某个结点的指针,试写出删除 P 所指结点的前驱结点的语句序列。
p是要删除的结点,q是p的前一个结点
q->next = p->next;简述以下算法的功能。
(1) Status A(LinkedList L) { // L 是无表头结点的单链表
if (L && L->next){
Q =L; L =L->next; P =L ;
while ( P->next) P =P->next ;
P->next =Q; Q->next = NULL;
}
return OK;
} // A
本程序实现的功能就是:如果L的长度不小于2,则将首元结点删去并插入到末尾。(2) void BB(LNode *s, LNode *q ) {
p =s ;
while (p->next!=q) p =p->next ;
p->next =s;
} //BB
void AA(LNode *pa, LNode *pb) {
// pa 和 pb 分别指向单循环链表中的两个结点
BB(pa, pb);
BB(pb, pa);
} //AA
如果L的长度不小于2,将L的首元结点变成尾元结点。将单循环链表拆成两个单循环链表。