对结构体操作引起的问题!

来源:百度知道 编辑:UC知道 时间:2024/06/25 08:36:50
下面的程序是一个简单的折半排序,原来只是对一个整数数组进行的折半查找,现在想根据一个结构体数组中的各个元素的ID号进行查找。
可是在查找时,老出现错误!我怀疑是自己可能是对结构体的操作没有正确?请各位不吝赐教! 谢谢!

#include <stdio.h>
#include <malloc.h>
#define MAX_NUM 100 //用于定义表的长度
int low,high,mid;
int n;
int ver_return;

typedef struct
{
int ID; /* 关键字项 */
char *name;
char *otherinfo; /* 其它数据项,具体类型在主程中定义 */
}RedType; /* 记录类型 */

n = 2;
RedType *red;
int bin_search(RedType *mm, int k)
{
low=1; high=n; //置初始查找范围的低、高端指针
while (low<=high)
{
mid=(low+high)/2;//计算中间项位置

if (k==(mm)->ID)
{
break;
} //找到,结束循环
else if (k< ((mm)->ID))
{
high=mid-1; //给定值k小
}
else
{
low=mid+1; //给定值k大
}
}

if (low<=high)
return low ; //查找成功
else
return 0 ; //查找失败
}

vo

是不是希望用链表实现呀?
如果不是的话,下面是我修改过的,已经调试通过了。
如果希望用链表,改动会比较大的
#include <stdio.h>
#include <malloc.h>
#define MAX_NUM 100 //用于定义表的长度
int low,high,mid;
int n;
int ver_return;

typedef struct
{
int ID; /* 关键字项 */
char *name;
char *otherinfo; /* 其它数据项,具体类型在主程中定义 */
}RedType; /* 记录类型 */

n = 2;
RedType red[2];
int bin_search(RedType *mm, int k)
{
low=1; high=n; //置初始查找范围的低、高端指针
while (low<=high)
{
mid=(low+high)/2;//计算中间项位置

if (k==mm[mid].ID)
{
break;
} //找到,结束循环
else if (k< mm[mid].ID)
{
high=mid-1; //给定值k小
}
else
{
low=mid+1; //给定值k大
}
}

if (low<=high)
return low ; //查找成功
else
return 0 ; //查找失败
}

void main()
{
int i,m,result;
int input_k=0;

for(i=0;i<n;i++)
{