计算机二级

假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是 ( )A.free(q);p->Next=q->next;B.(* p).next=(* q).nexy;free(q);C.q=(* q).next;(* p).next=q;free(q);D.q=q->next;p->next=q;p=p->next;free(p);

题目

假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是 ( )

A.free(q);p->Next=q->next;

B.(* p).next=(* q).nexy;free(q);

C.q=(* q).next;(* p).next=q;free(q);

D.q=q->next;p->next=q;p=p->next;free(p);

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用的语句是()。

A.p=q->next

B.p->next=q

C. p->next=q->next

D.q->next=NULL


参考答案C

第2题:

在一个不带头结点的单循环链表中,p、q分别指向表中第一个结点和尾结点,现要删除第一个结点,且p、q仍然分别指向新表中第一个结点和尾结点。可用的语句是p=p->next;和( )。

A、q=p

B、q->next=p

C、p=q->next

D、p->next=q


标准答案:B

第3题:

在双向循环链表中,在p指针所指的结点后插入一个指针q所指向的新结点,修改指针的操作是()

A、p->next=q;q->prior=p;p->next->prior=q;q->next=q;

B、q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;

C、q->next=p->next;q->prior=p;p->next=q;p->next=q;

D、p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;


参考答案:B

第4题:

有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。

struct node

{ int data;

struct node *next;

} *p, *q, *r;

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是

A.r->next=q; q->next=r->next; p->next=r;

B.q->next=r->next; p->next=r; r->next=q;

C.p->next=r; q->next=r->next; r->next=q;

D.q->next=r->next; r->next=q; p->next=r;


正确答案:A
解析:“r->next=q;”表示r的下一个结点为qo“q->next=->next;”则表示q的下一个结点是r的下一个结点,即q结点本身,因此与后续结点便断开了联系。

第5题:

要在一个单向链表中删除p所指向的结点,已知q指向p所指结点的直接前驱结点,若链表中结点的指针域为next,则可执行q->next= p->next。()

此题为判断题(对,错)。


标准答案:对

第6题:

在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是()。

A.p->next=q;q->prior=p;p->next->prior=q;q->next=q;

B.p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;

C.q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;

D.q->prior=p;q->next=p->next;p->next=q;p->next->prior=q;


参考答案:C

第7题:

在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是p所指结点的直接后继,现要删除q所指结点,可用语句( )。

A、p->next=q->next

B、q->next=NULL

C、p->next=q

D、p=q->next


标准答案:A

第8题:

程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针向链表的第—个结点。

若有以下程序段 q=s; s=s->next; p=s; while(p->next) p=p->next; P->next=q; q->next=NULL; 该程序段实现的功能是______。

A.首结点成为尾结点

B.尾结点成为首结点

C.删除首结点

D.删除尾结点


正确答案:A
解析:根据语句q=s得知指针q指向结点a;由s=s->next;p=s得知指针p和s均指向接点b;在满足while语句的情况下,抽行p=p->next;得知p现在指向结点c;由p->next=q得知p指向的结点是a,a移到c的后面;由q->next=NULL得知结点a与结点b的指针断开。移动后的结构图如图所示:

第9题:

已知指针p和q分别指向某单链表中第一个结点和最后一个结点。假设指针x指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为()。

A、q->next=x->next;x->next=p;

B、s->next=p;q->next=x->next;

C、p->next=x->next;x->next=p;

D、x->next=q;p->next=x->next;


参考答案:A

第10题:

假定已建立以下链表结构,且指针p和q已指向如图所示的结点:

则以下选项中司将q所指结点从链表中删除并释放该结点的语句组是______。

A.(*p).next=(*q).next; free(p);

B.p=q->next; free(q);

C.p=q; free(q);

D.p->next=q->next; free(q);


正确答案:D
解析:本题题面要求删除q所指结点并释放该结点,而选项A中虽然是删除了q所指鲒点,但并未释放q这个结点,而释放的是p结点,所以选项A错误;选项B是将q的下一结点的地址赋值给指针变量p,这意味着p原来的成员变量内容被q的下一结点的成员变量内容所代替,即原p结点也被删除了,所以选项B错误;选项C相当于将q的所有成员变量内容代替了p的所有成员变量内容,即p结点被删除,所以错误;选项D是将q的下—结点的地址赋值给p的成员next (成员next用于存放一结点的地址),使得p的next成员不再指向q,而是指向q的下一结点,相当于删除了q这个结点,同叫用free函数正确释放了q这一结点,所以选项D正确。

更多相关问题