首页 新闻 搜索 专区 学院

数据结构一题,各位帮帮忙

0
悬赏园豆:20 [已解决问题] 解决于 2010-03-29 16:25

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,应当怎么改啊?

myviewer的主页 myviewer | 初学一级 | 园豆:180
提问于:2010-03-28 16:56
< >
分享
最佳答案
0

提几个意见,仅供参考

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 }
收获园豆:20
翰墨小生 | 初学一级 |园豆:51 | 2010-03-28 20:51
明白了,谢谢啊
myviewer | 园豆:180 (初学一级) | 2010-03-29 16:22
其他回答(1)
0

楼上说的很对,你的习惯很不好...

但就你这个题,应该是下面的代码错了:

  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;

 

不过,总而言之,你的代码习惯很不好,楼上就很好...

xiiiiiin | 园豆:210 (菜鸟二级) | 2010-03-29 14:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册