跪求解一道数据结构题!!

2.12设和均为顺序表,和分别为和中除去最大共同前缀后的子表。若空表,则;若=空表,而空表,或者两者均不为空表,且的首元小于的首元,则;否则。试写一个比较,大小的算法。解... 2.12 设 和 均为顺序表, 和 分别为 和 中除去最大共同前缀后的子表。若 空表,则 ;若 =空表,而 空表,或者两者均不为空表,且 的首元小于 的首元,则 ;否则 。试写一个比较 , 大小的算法。
解:
Status CompareOrderList(SqList &A,SqList &B)
{
int i,k,j;
k=A.length>B.length?A.length:B.length;
for(i=0;i<k;i++){
if(A.elem[i]>B.elem[i]) j=1;
if(A.elem[i]<B.elem[i]) j=-1;
}
if(A.length>k) j=1;
if(B.length>k) j=-1;
if(A.length==B.length) j=0;
return j;
}
这个答案啥意思啊 我怎么觉得它不对啊! 题目我也不知道啥意思!高手快来啊!
展开
 我来答
混沌帅
2011-04-17
知道答主
回答量:23
采纳率:0%
帮助的人:9.7万
展开全部
这题原题是这样的,看得懂吧?
2.12 设A=(a1,…,am)和B=(b1,…,bn)均为有序顺序表,
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大小的算法。(注意:在算法中,不要破坏原表A
和B,也不一定先求得A'和B'才进行比较)。

顺序表类型定义如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;

你上面那个答案代码稍微改改就好了。认真看看题目,会懂的。
Status CompareOrderList(SqList &A,SqList &B)
{
int i,k,j;
k=A.length>B.length?A.length:B.length;
for(i=0;i<k;i++){//两者均不为空表,且A'的首元小于B'的首元,则A<B;否则A>B
if(A.elem[i]>B.elem[i]) return'>';
if(A.elem[i]<B.elem[i]) return'<';
}
if(A.length>k) return'>';//B为空表,A>B
if(B.length>k) return'<';//A为空表,A<B
if(A.length==B.length) return'=';//A,B均为空表,A=B
}
馨冷若风
2020-10-25 · TA获得超过102个赞
知道答主
回答量:57
采纳率:100%
帮助的人:5万
展开全部
# include <stdio.h>
# include <stdlib.h>
# define initsize 20//初始分配量
# define LISTINCREMENT 5//分配增量
typedef int ElemType;
typedef struct
{
ElemType * elem;
int length;
int listsize;
}SqList;
void IntiList(SqList &L,int n)//建立一个表长为n的顺序表
{
ElemType *p;
L.elem = (ElemType *)malloc(initsize*sizeof(ElemType));
if(!L.elem)
{
printf("分配失败");
}
printf("请依次输入顺序表的元素:\n");
for(p = L.elem;p < L.elem+n;p++)
{
scanf("%d",p);
}
L.length = n;
L.listsize = initsize;
}
void IntiList_NULL(SqList &L)//建立一个空的顺序表
{
L.elem = (ElemType *)malloc(initsize*sizeof(ElemType));
if(!L.elem)
{
printf("分配失败");
}
L.length = 0;
L.listsize = initsize;
}
void ListInsert(SqList &L,int i,ElemType e)//在顺序表中第i个位置插入元素e
{
ElemType *p,*q,*newbase;
q=L.elem+i-1;//q为插入位置
if(i<1||i>L.length+1)//i值不合法
{
printf("插入元素位置不合法\n");
}
if(L.length>=L.listsize)//当前储存空间已满,增加分配
{
newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
{
printf("分配失败");
}
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
for(p=L.elem+L.length-1;p>=q;p--)//插入位置及之后元素右移
{
*(p+1)=*p;
}
*q=e;
++L.length;
}
void compare(SqList A,SqList B,SqList &A1,SqList &B1)
{
int i;
ElemType *pa,*pb;
i=1;
pa=A.elem;
pb=B.elem;
while(*pa==*pb)
{
ListInsert(A1,i,*pa);
ListInsert(B1,i,*pb);
pa++;
pb++;
i++;
}
if(A1.length!=0 || B1.length!=0)
{
if(*pa<*pb)
{
printf("A<B\n");
}
else
{
printf("A>B\n");
}
}
else
{
printf("A=B\n");
}
}
int main()
{
int n1,n2;
SqList A,B,A1,B1;
printf("请输入顺序表A的元素个数n1:\n");
scanf("%d",&n1);
IntiList(A,n1);
printf("请输入顺序表B的元素个数:\n");
scanf("%d",&n2);
IntiList(B,n2);
IntiList_NULL(A1);
IntiList_NULL(B1);
printf("\n");
compare(A,B,A1,B1);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
倜傥还谦卑的小白桦07
2011-04-14
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
哥们 你的题是啥意思啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式