首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于比较算法的一个有关问题

2012-02-20 
关于比较算法的一个问题设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

关于比较算法的一个问题
设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的问题,你自己看看吧!

热点排行