设单链表中结点的结构为:从一个具有n个结点的有序单链表中查找其值等于x的结点时,在查找成功的
设单链表中结点的结构为:
从一个具有n个结点的有序单链表中查找其值等于x的结点时,在查找成功的情况下,平均需要比较()个结点。
A、n
B、n/2
C、(n-1)/2
D、(n+1)/2
设单链表中结点的结构为:
从一个具有n个结点的有序单链表中查找其值等于x的结点时,在查找成功的情况下,平均需要比较()个结点。
A、n
B、n/2
C、(n-1)/2
D、(n+1)/2
设单链表中结点的结构为:
在一个具有n个结点的单链表中插人一个新结点,并可以不保持原有顺序的算法的时间复杂度是().
A、O(1)
B、O(n)
C、O(n2)
D、O(nlog2n)
针对带附加头结点的单链表,试编写下列函数。
(1)定位函数Locate:在单链表中寻找第i个结点。若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL。
(2)求最大值函数max:通过一趟遍历在单链表中确定值最大的结点,
(3)统计函数number:统计单链表中具有给定值x的所有元素,
(4)建立函数create:根据一维数组aLn]建立一个单链表,使单链表中各元素的次序与a[n]中各元素的次序相同,要求该程序的时间复杂度为O(n)。
(5)整理函数tidyup:在非逆减有序的单链表中删除值相同的多余结点。
设线性表为(1,13,16,18) ,以下程序用说明结构变量的方法建立头指针为head,尾结,点为18的单向循环链表,并输出链表中各结点中的数据。
#define NULL 0
Void main()
{
NODE a,b,c,d,*head,*p;
a.data=1;
b.data=13;
c.data=16;
d.data=18; /* d是尾结点*/
head=();
a.next=&b;
d.data=18; /* d是尾结点*/
head=();
a.next=&b;
b.next=&c;
c.next=&d;
()=head; /*以上结束建立循环链表的过程*/
p=head; /* p为工作指针,准备输出链表*/
do
{
printf("%d/n",());
();
}while();
}
设单链表中结点的结构为:
不带附加头结点的单链表first为空的判定条件是()。
A、first==NULL;
B、first->link=-NULL;
C、first->link==first;
D、first!=NULL;
设单链表中结点的结构为:
已知单链表中结点*q是结点*p的直接前驱,若在*q与*p之间插人结点*s,
则应执行以下()操作。
A、s->link-p-link;p->link-s;
B、q->link=s;s->link-p:
C、p->link-s->link;s~>link=p;
D、p->link=s;s->link=q;