关于比较算法的一个问题
设A,B均为顺序表,如A={9,6,8,7,3,2,5},B={9,6,8,7,4,12,20,58}
若a[i]> b[i],则A> B,否则B> A,下面是我的算法,请帮我看看我的比较函数该如何修改
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define NULL 0
/*顺序表的定义*/
#define listsize 10
typedef struct SequeueList{
int data[listsize]; /*在内存中开辟连续的存储单元*/
int length; /*length始终指向数组的尾部来表示数据的个数*/
}sqlist;
sqlist *la;
sqlist *Ainitlist(){
sqlist *l;
la=(sqlist*)malloc(sizeof(sqlist)); /*顺序表的建立*/
la-> length=-1;/*顺序表的长度置-1*/
return la; /*建立成功后返回顺序表的首地址*/
}
sqlist *lb;
sqlist *Binitlist(){
sqlist *lb;
lb=(sqlist*)malloc(sizeof(sqlist)); /*顺序表的建立*/
lb-> length=-1;/*顺序表的长度置-1*/
return lb; /*建立成功后返回顺序表的首地址*/
}
sqlist *ListCompare(sqlist *la,sqlist *lb){
int i;
for(i=1;i <=la-> length&&i <=lb-> length;i++){
if(la-> data[i]!=lb-> data[i])
return la-> data[i]> lb-> data[i]?1:-1;
else if(la-> length==lb-> length)
return 0;
else
return la-> length> lb-> length?1:-1;
}
}
void main() {
int i=0,j; /***i为插入元素的位置***/
clrscr();
la=Ainitlist();
printf( "please input a number to the list:\n ");
scanf( "%d ",&la-> data[0]);
la-> length++;
for(i=1;la-> data[i-1]!=0;i++) {
printf( "please input a number to the list again:\n ");
scanf( "%d ",&la-> data[i]);
la-> length++;
}
printf( "\nthe origin string numbers is:\n ");
for(j=0;j <la-> length+1;j++)
printf( "%4d ",la-> data);
printf( "\n ");
printf( "all the doing has been over!\n ");
lb=Binitlist();
printf( "please input a number to the list:\n ");
scanf( "%d ",&lb-> data[0]);
lb-> length++;
for(i=1;lb-> data[i-1]!=0;i++) {
printf( "please input a number to the list again:\n ");
scanf( "%d ",&lb-> data[i]);
lb-> length++;
}
printf( "\nthe origin string numbers is:\n ");
for(j=0;j <lb-> length+1;j++)
printf( "%4d ",lb-> data[j]);
printf( "\n ");
printf( "all the doing has been over!\n ");
ListCompare(la,lb);
}
[解决办法]
初步看了下,程序写的比较乱,比较函数应该如下
int ListCompare(sqlist *la,sqlist *lb){
int i;
for(i=1;i <=la-> length&&i <=lb-> length;i++){
if(la-> data[i]!=lb-> data[i])
return la-> data[i]> lb-> data[i]?1:-1;
else if(la-> length==lb-> length)
return 0;
else
return la-> length> lb-> length?1:-1;
}
return -2;
}
根据你的思路应该比较后返回一个整形,但是你返回了个指针
另外在你main中也有很多printf和scanf的问题,你自己看看吧!