关于比较算法的一个问题

lucyber 2007-09-15 07:25:11
设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);
}
...全文
84 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Treazy 2007-09-15
  • 打赏
  • 举报
回复
初步看了下,程序写的比较乱,比较函数应该如下
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的问题,你自己看看吧!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧