2.12 设A=(a1,...,am)和B=(b1,...,bn)均为顺序表,A'和B'分别为A和B中除去最大共同前缀后的子表。若A'=B'=空表,则A=B;若A'=空表,而B'≠空表,或者两者均不为空表,且A'的首元小于B'的首元,则A<B;否则A>B。试写一个比较A,B大小的算法。
//A,B为顺序表,若A<B时,返回-1;A=B时,返回0;A>B时,返回1
int Compare-List(SqList A, SqList B){
{
int i=0,k,x,y;
while ((i<=A.length-1) && (i<=B.length-1) && (A.elem[i]==B.elem[i])) ++i;
if(i==A.length && i==B.length) k=x;
if((i==A.length && i<=B.length-1)||(i<=A.length-1 && i<=B.length-1 && A.elem[i]<B.elem[i])) k=y;
switch (k)
{
case 'x' : return 0; break;
case 'y' : return -1;break;
default : return 1;
}
}
为什么代码运行后返回值全是1,应当怎么改啊?
提几个意见,仅供参考
1. 函数名中不可能出现“-”,不知道你是怎么编译的
2. 定义变量时最好要初始化,这是好的习惯,int i=0,k,x,y; 这里k, x, y的值都是不确定的,不是好习惯
3. 判断符合某个条件时,立即返回相应的值即可,不必再用switch语句。
修改后代码如下:
1 int Compare_List(SqList A, SqList B)
2 {
3 {
4 int i = 0 ;
5
6 while ((i < A.length) && (i < B.length) && (A.elem[i] == B.elem[i]))
7 ++i;
8
9 // A'和B'均为空表,则A = B
10 if(i == A.length && i == B.length)
11 return 0 ;
12
13 //
14 if((i == A.length && i < B.length)||(i < A.length && i < B.length && A.elem[i] < B.elem[i]))
15 return -1 ;
16 else
17 return 1 ;
18 }
19 }
楼上说的很对,你的习惯很不好...
但就你这个题,应该是下面的代码错了:
switch (k)
{
case 'x' : return 0; break;
case 'y'
: return -1;break;
default : return 1;
}
k是整型,'x','y'是字符.
而且,就算你改成
switch (k)
{
case x : return 0; break;
case y
: return -1;break;
default : return 1;
}
你还是错的..
因为x,y的值,你没有初始化...
或者你在定义的时候可以设x=10,y=20;
不过,总而言之,你的代码习惯很不好,楼上就很好...