问题 填空题

函数insertdl1和insertdl2分别是用类程序设计语言和C++语言描述的算法。其功能是在d1指向的带表头结点双向循环链表中,将数据域值为x的新结点插在数据域值为ai的结点之前,并返回插入位置i值,如果表中数据域值为ai的结点不存在,则返回值i为0。链表结占加图2所示,结点类型为dnode,数据域data为整型,前、后链域分别为prior和next。

请选择一种算法描述形式,在算法中的空格处填入正确内容并回答问题(1、2任选一题,只能选做一题),

1.类程序设计语言描述形式符号&开头的参数为输入输出参数。d1指向链表结点的数据域用d1^.data表示,前、后链域分别用d1^.prior、d1^.next表示。算法中,nil为空指针。

Algorithm insertd11(&d1,ai,x)

//insertd11函数的类型为整型//

//d1为指向双向循环链表的头指针//

//ai,x为双向循环链表结点数据域类型//

//i为整型//

//p,s为辅助指针//

{

pd1;

i0;

while(())and(p^.next.data<>ai)

{ pp^.next;

()

}

if p^.next^.data=ai then

{new(s);

();

s^.nextp^.next;

();

s^.priorp;

p^.nexts;

ii+1

}

else i0;

return (i)

}

回答以下问题:

设dl指向的双向循环链表为非空表,链表第一个结点数据域在算法描述时应表示为()

设d1=(18,45,36,27),ai=36,x=90,上述算法执行后,d1=( () )。

上述算法中若数据域值为ai的结点存在,则指针s指向的结点位于指针P指向的结点

()(之前/之后)。

②C++语言描述形式

符号&开头的参数为引用参数。dl指向链表结点数据域用dl->data表示,前、后链域分别用d1->prior、d1->next表示。算法中,NULL为空指针。

Algorithm insertdl2(&dl,ai,x)

//insertdl2函数的类型为整型

//dl为指向双向循环链表的头指针

//ai,x为双向循环链表结点数据域类型

//i为整型

//p,s为辅助指针

{

p=dl

i=0; 、

while(() &&p->next->data!=ai){

p=p->next;

();

}

if(p->next->data==ai){

s=new dnode;

();

s->next=p->next:

();

s->prior=p;

p->next=s;

++i;

}

else i=0;

return i;

}

回答以下问题:

设d1指向的双向循环链表为非空表,链表第一个结点数据域在算法描述时应表示为()。

设d1=(18,45,36,27),ai=36,x=90,上述算法执行后,d1=(())。

上述算法中若数据域值为ai的结点存在,则指针s指向的结点位于指针P指向的结点()(之前/之后)。

答案

参考答案:①P^.next<>dl;ii+A;S^.datax;P^.next^.priors;dl^.next^.data;dl=(18,45,90,36,27);之后②Pànext!=dl;++i;sàdata=X;Pànextàprior=S;dlànextàdata;dl=(18,45,90,36,27);之后

单项选择题
填空题