【分析解答题】
[说明]
假设设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选项