数据结构与算法分析(C++语言版)张琨版 课后答案———第二章

数据结构与算法分析(C++语言版)张琨版 课后答案———第二章)

    • 选择
    • 填空
    • 判断
    • 简答
    • 算法设计

答案来自网络,如果有错误请联系我更正(772173629),谢谢合作!

选择

1.C
2.D
3.C
4.A
5.A
6.D
7.D
8.A
9.不存在
10.D

填空

1.指针域
2.顺序存储结构、链式存储结构
3.n-i
4.s→next→next = p→next; p→next=s;
5.(r-f+m)%m
6.O(1)
7.head→next ==NULL
8.前驱结点、后继结点
9.p->next s
10.4

判断

1.错
2.错
3.对
4.错
答:静态链表具有链表的特点,存取表中第i个元素也是需要从头开始查找的。时间复杂度是O(n),所以和n有关。
5.对
6.对
7.错
8.错
9.对
10.错

简答

1、顺序存储结构。顺序表可以快速随机存取元素,不便于插入和删除元素。
2、尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便。设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next和rear,查找时间都是O(1)。 若用头指针来表示该链表,则查找终端结点的时间为O(n)。

算法设计

1、

int DeleteX(lnode *&h,int x) {
lnode *pre = h, *p=pre->next ,*s ;
while(p != NULL && p->data !=x) {
pre =p;
p = p->next;
}
if(p!=NULL) {						找到第一个值为x的*p节点
while(p->data ==x) {			//递增排列下,删除第一个x后面重复的x
pre->next = p->next;
s = p;
p = p->next;
Delete(s);
}
return 1;
}
else return 0;						未找到值为x的节点
}

2、

void Reverse1(LinkList *&L) {
LinkList *p = L->next,*q;
L->next = NULL;
while(p!=NULL) {
q = p->next;						//用q 临时保存*p 的后继节点
p->next = L->next;
L->next = p;
p=q;
}
}

你可能感兴趣的:(数据结构答案)