针对带附加头结点的单链表,试编写下列函数。
(1)定位函数Locate:在单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL。
(2)求最大值函数max:通过一趟遍历在单链表中确定值最大的结点,
(3)统计函数number:统计单链表中具有给定值x的所有元素,
(4)建立函数create:根据一维数组aLn]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。
(5)整理函数tidyup:在非逆减有序的单链表中删除值相同的多余结点。
设单链表中结点的结构为:
若想在单链表中摘除结点*p(*p既不是第一个也不是最后一个结点)的直接后继,则应执行以下()操作.
A、p->link=p->link->link;
B、p-p->link;p->link-p->link->link;
C、p->link=p->link;
D、p=p->link->link;
设线性表试写一个按下列规则合并A,B为线性表C的算法,即使得
线性表A,B和C均以单链表作存储结构,且C表利用A表和B表中的结点空间构成。注意:单链表的长度值m和n均未显式存储。
设单链表中结点的结构为:
不带附加头结点的单链表first为空的判定条件是()。
A、first==NULL;
B、first->link=-NULL;
C、first->link==first;
D、first!=NULL;
(1)编写一个算法,从任一给定的位置(pr,p)开始,将指针p右移k个结点。如果p移出链表,则将p为0,并让pr停留在链表最右边的结点上。
(2)编写一个算法,从任一给定的位置(pr,p)开始,将指针p左移k个结点。如果p移出链表,则将p置为0,并让pr停留在链表最左边的结点上。
a)图7-21中的边能剖分为两条路(边不相重),试给出这样的剖分。
b)设G是一个具有k个奇数度结点(k>0)的连通图,证明在G中的边能剖分为k/2条路(边不相重)。
c)设G是一个具有k个奇数度结点的图,问最少加几条边到G中,而使所得的图有一条欧拉回路,说明对于图7-21如何能做到这一点。
d)在c)中如果只允许加平行于G中已存在的边,问最少加几条边到G中,使所得的图中有一条欧拉回路,这事总能做到吗?叙述能做到这事的充分必要条件。