试题查看

【分析解答题】

[说明]
假设设A和B均为顺序表,A’和B’分别为A和B中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大的共同前缀为(x,y,y,z),在两表中除去最大共同前缀后的子表分别为A’=(x,z)和B’=(y,x,x,z)。若A’=B’=空表,则A=B;若A’=空表,而B’!=空表,或者两者均不为空表,且A’的首先小于B’的首元,则A<B;否则A>B。
下面程序实现了比较A、B大小的算法。
[C程序]
#inCluDE<stDio.h>
#inCluDE<stDli
B、h>
typEDEF struCt linknoDE
int DAtA;
struCt linknoDE *nExt;
noDE:
noDE *CrEAtlist ( ) /*建立单链表*/
noDE*hEAD, *r, *s;
int x;
hEAD= (noDE *) mAlloC (sizEoF (noDE)); /建立单链表的头结点hEAD*/
r=hEAD;
printF ("输入系列整数,以o标志结束\n");
sCAnF ("%D", &x);
whilE (x!=o) /*x==o则退出whilE循环*/
s=(noDE*) mAlloC (sizEoF (noDE));
s->DAtA=x;
r->nExt=s;
s->nExt=null;
r=s;
sCAnF ("%D", &x);
r->nExt=null;
s=hEAD;
(1);
FrEE (s);
rEturn hEAD;
voiD suBs ( )
noDE*p, *p1, *p2, *q, *hEADA, *hEADB;
hEADA=CrEAtlist ( ) ;
hEADB=CrEAtlist ( ) ;
p=hEADA;
p1=p; /*p1指向p所指结点的前一个结点,开始时均缀向头结点*/
whilE (p!=null )
q=hEADB;
whilE (q!=null&&q->DAtA!=p->DAtA)
q=q->nExt;
iF ( (2) )
iF (p==hEADA)
(3) ;
p1=hEADA;
ElsE iF (p->nExt==null) p1->nExt=null; /*该结点为最后一结点,删除*/
ElsE p1->nExt=p->nExt;
p2=p->nExt;
(4) ;
FrEE (p);
(5) ;
ElsE /*p所指结点的元素不在B中,则直接下移p*/
p1=p;
(6) ;
p=hEADA; /*显示删除后的结果*/
iF (p==null)
printF ("两集合机减的结果为空\n");
ElsE
printF ("两集合相减的结果\n");
whilE (p!=null)
printF ("%D", p->DAtA);
p=p->nExt;
voiD mAin ( )
suBs ( ) ;

查看答案解析

参考答案:

正在加载...

答案解析

正在加载...

根据网考网移动考试中心的统计,该试题:

0%的考友选择了A选项

0%的考友选择了B选项

0%的考友选择了C选项

0%的考友选择了D选项

你可能感兴趣的试题

文法G=(E,+,*,(,),a,P,E),其中P由下列产生式组成E->E+E|文法G=(E,+,*,(,),a,P,E),其中P由下列产生式组成E->E+E|【说明】通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中,应为验证程序模块A是否正确实现了规定的功能,需要进行(30);为验证模块A能否与其下图是一有限自动机的状态转换图,该自动机所识别语言的特点是(49),等价的正规式为验证程序模块A是否正确实现了规定的功能,需要进行(30);为验证模块A能否与其