已知带头结点的单链表中的关键字为整数,为提高查找效率,需将它改建为采用拉链法处理冲突的散列表。设散列表的长度为m,散列函数为Hash(key)=key%m。链表的结点结构为:<img src='https://img2.soutiyun.com/ask/uploadfile/11013001-11016000/16bf319ab369c90e712d59da2fb6a090.jpg' />。请在空缺处填入适当内容,使其成为一个完整算法。
void f33(LinkList L,LinkList H[],int m)
{//由带头结点的单链表L生成散列表H,散列表生成之后原链表不再存在
int i,j;
LinkList p,q;
for(i=0;i<m;i++)
H[i]=[ (1) ];
p=L—>next;
while(p)
{
q=p—>next
j=p—>key%m;
[ (2) ];
H[j]=p;
[ (3) ];
}
free(L);
}
时间:2023-09-29 14:24:16
相似题目
-
从单链表中删除指针s所指结点的下一个结点t,其关键运算步骤为()。
A . s↑眑ink:=t
B . t↑眑ink:=s
C . t↑眑ink:=s↑眑ink
D . s↑眑ink:=t↑眑ink
-
设某带头结头的单链表的结点结构说明如下:typedef struct nodel{int data struct nodel*next;}node;试设计一个算法:void copy(node*headl,node*head2),将以head1为头指针的单链表复制到一个不带有头结点且以head2为头指针的单链表中。
-
已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()。
A . q->next=s->next;s->next=p;
B . s->next=p;q->next=s->next;
C . p->next=s->next;s->next=q;
D . s->next=q;p->next=s->next;
-
若要将一个单链表中的元素倒置,可以借助()建立单链表的思想将链表中的结点重新放置。
-
在单链表中,若给定某个结点的指针,要删除该结点的后继结点的时间复杂度为()。
-
在单链表中删除第 i 个结点的基本操作为( )
-
7. 对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是()。
-
设单链表中结点的结构为(data, next)。已知指针p所指结点不是尾结点,若在*p之后插入结点*s,则应执行的操作是
-
已知一个不带头结点单链表的头指针为L,则在表头元素前插入新结点*s的语句为()
A.L=s;s->next=L;
B.s->next=L->next;L->next=s;
C.s=L;s->next=L;
D.s->next=L;s=L;
-
在一个单链表中,若在指针p所指结点之后插入指针s所指结点,则相应的语句为()
A.s->next=p; p->next=s;
B.s->next=p->next; p->next=s;
C.s->next=p->next; p=s;
D.p->next=s; s->next= p->next ;
-
2、对于一个非空的循环单链表,若头指针为head,假设指针myrear指向表中的最后一个结点,如果要在非空的循环单链表的最前面插入一个新结点p,则执行()。
A.p->next=head;myrear->next=p;head=p;
B.head->next=p;myrear->next=p;head=p;
C.myrear->next=p;head=p;head->next=p;
D.myrear->next=p;head=p;p->next=head;
-
2、在一个带头结点的单链表中,若 head 所指结点是头结点,若要删除第一个实际元素结点,则执行()。
A.p=head->next;head->next=p->next;free(p);
B.p=head;free(p);head=head->next;
C.head=head->next;p=head;free(p);
D.p=head;head=head->next;free(p);
-
在一个单链表中,已知q所指结点是p所指结点的后继结点,若在p和q之间插入结点s,则执行()。
A.s->next=p->next;p->next=s;
B.p->next=s->next; s->next=q;
C.q->next=s;s->next=p;
D.p->next=s;s->next=q->next;
-
【单选题】2. 从一个具有n个结点的单链表中查找值为x的结点,在查找成功情况下,需平均比较()个结点。
A.n
B.n/2
C.(n-1)/2
D.(n+1)/2
-
有一个由整数元素构成的非空单链表A,设计一个算法,将其拆分成两个单链表A和B,使得A单链表中含有所有的偶数结点,B单链表中含有所有的奇数结点,且保持原来的相对次序。
-
4、设有序单链表的关键字序列为{1,4,6,11,19,35,52,54,57,71,78,86,92,96},当查找关键字为21的结点时,经()次比较后查找失败?
A.14
B.6
C.7
D.3
-
2、从一个具有n个结点的单链表中查找其值等于x的结点,在查找成功的情况下,需要比较 个结点。
A.n
B.n/2
C.(n-1)/2
D.(n+1)/2
-
根据一个结点数据类型为整型的单链表生成两个单链表,使得第一个单链表中包含原单链表中所有数据值为奇数的结点,并使得第二个单链表中包含原单链表中所有数据值为偶数的结点,原有单链表保持不变。
-
在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入结点s,则执行()
A.s->next=p->next;p->next=s;
B.p->next=s->next; s->next=p;
C.q->next=s;s->next=p;
D.p->next=s;s->next=q;
-
4、假设在长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某个结点的指针,编写一个算法删除该结点的前驱结点
-
在一个单链表中,已知q所指节点是p所指结点的直接前驱,若要删除p结点,则执行()操作。
A.q=p->next;free(p);
B.q->next=p->next;free(p);
C.q=p;p->next=p->next;free(q);
D.p->next=q->next;free(p);
-
在一个单链表中删除p所指向结点的后继结点时,其算法的时间复杂度为()。
A.O(n)
B.O(n/2)
C.O(1)
D.O(n2)
-
1、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入结点s,则执行()。
A.s->next=p->next;p->next=s;
B.p->next=s->next; s->next=p;
C.q->next=s;s->next=p;
D.p->next=s;s->next=q;
-
头指针为head的带头结点的单链表为空的判定条件是()
A.head==NULL
B.head!=NULL
C.head->next==head
D.head->next==NULL