在双向链表中,在p所指向的结点前插入一个q所指向的结点,相应的操作语句是()。 注:双向链表的结点结构为(prior,data,next)。
A.p->prior=q;q->next=p;p->prior->next=q;q->prior=q;
B.p->prior=q;p->prior->next=q;q->next=p;q->prior=p->prior;
C.q->next=p;q->prior=p->prior;p->prior->next=q;p->prior=q;
D.q->prior=p->prior;q->next=q;p->prior=q;p->prior=q;
第1题:
阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度 freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。
【函数】
void Locate( int &x)
{ <结点类型说明>
* p =first -> next;
while(p!=frist&&(1))P=P->next;
if(p! =first) /*链表中存在x*/
{(2);
<结点类型说明>
* current = P; /*从链表中摘下这个结点*/
Current -> prior -> next = current -> next;
Current -> next -> prior = current -> prior;
P = current -> prior; /*寻找重新插入的位置*/
While(p! =first &&(3))p=p->prior;
Current-> next =(4); /*插入在P之后*?
Current -> prior = P;
P -> next -> prior = current;
P->next=(5);
}
else printf("Sorry. Not find! \n"); /*没找到*/
}
第2题:
设指针变量p指向单链表中的结点A,则删去结点A的语句序列为 Q=p->next;p->data = p->data: p->next=(); :feee(q);
第3题:
第4题:
已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()。
第5题:
在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是S->next=p->next;()=s;s->prior=();p->next=s;
第6题:
在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是()。
第7题:
要在一个单向链表中p所指向的结点之后插入一个S所指向的新结点,若链表中结点的指针域为next,可执行()和p->next==s的操作。
第8题:
设有一个不带头结点的单向链表,头指针为head,结点类型为NODE,每个结点包含一个数据域data和一个指针域next,该链表有两个结点,p指向第二个结点(尾结点),按以下要求写出相应语句。把该结点插入链表的尾部,释放指针s的指向。
第9题:
在一个双向链表中删除指针p所指向的结点时,需要对p->next->prior指针域赋值为()
第10题:
第11题:
q->next=s->next;s->next=p;
s->next=p;q->next=s->next;
p->next=s->next;s->next=q;
s->next=q;p->next=s->next;
第12题:
p->next=q; q->prior=p; p->next->prior=q; q->next=q;
p->next=q; p->next->prior=q; q->prior=p; q->next=p->next;
q->prior=p; q->next=p->next; p->next->prior=q; p->next=q;
q->prior=p; q->next=p->next; p->next=q; p->next->prior=q;
第13题:
在非空双向循环链表结点中,prior域指向该结点的直接前驱,next域指向直接后续,那么在q所指的结点后面插入p所指的结点的过程为______。
A.q→next=p;p→prior=q;q→next→prior=p;p→next=q→next。
B.p→next=q→next;q→next=p;q→next→prior=p;p→prior=q。
C.p→prior=q;p→next=q→next;q→next=p;q→next→prior=p。
D.p→next=q→next;q→next→prior=p;p→prior=q;→next=p。
第14题:
第15题:
双向循环链表结点的数据类型为: 设p指向表中某一结点,要显示p所指结点的直接前驱结点的数据元素,可用操作()。
Aprintf(“%d”,p->next->data);
Bprintf(“%d”,p->prior->data);
Cprintf(“%d”,p->prior->next);
Dprintf(“%d”,p->data);
第16题:
在双向链表中,要删除p所指的结点,其中所用的一条语句(p->next)->prior=p->prior;的功能是:使P所指结点的直接后继的左指针指向()
第17题:
设单链表的结点结构为(data,next)。已知指针p指向单链表中的结点,q指向新结点,欲将q插入到p结点之后,则需要执行的语句:();()。
第18题:
在一个单链表中p指向结点a,q指向结点a的直接后继结点b,要删除结点b,可执行()。
第19题:
要在一个单向链表中删除p所指向的结点,已知q指向p所指结点的直接前驱结点,若链表中结点的指针域为next,则可执行()。
第20题:
非空双向循环链表中由q所指的结点后面插入一个由p指的结点的动作依次为:p->prior=q,p->next=q->next,q->next=p,q->prior->next←p。
第21题:
第22题:
对
错
第23题:
第24题: