在 C 中搜索数据结构数组的成员
Search in members of array of data structures in C
我有这个数据结构的数组:
typedef struct {
unsigned long id; // Node identification
char *name;
double lat, lon; // Node position
} node;
我想通过 id 进行二进制搜索。
我试过这样定义函数
unsigned long bi_search(unsigned long *Vector, unsigned long Vlen, unsigned long target) {
imin = 0; imax = Vlen-1;
while (imax > imin) {
imid = (imax + imin)/2;
if (Vector[imid] == target) {
return imid;
}
else if (Vector[imid] < target) {
imin = imid + 1;
}
else {
imax = imid - 1;
}
}
return -1;
}
并用
调用它
bi_search(&nodes->id, nnodes, 0)
该函数适用于向量,但我无法使其在结构数组内部进行搜索。
您需要调整搜索函数的签名和调用方式。
您必须使用指向结构类型数组的第一个元素的指针。在函数内部,您将使用 vector[i].id
访问数组的第 i
th 元素的 id
成员。
unsigned long bi_search(node *vector, unsigned long vlen, unsigned long target)
{
unsigned long imin = 0;
unsigned long imax = vlen - 1;
while (imax > imin)
{
unsigned long imid = (imax + imin) / 2;
if (vector[imid].id == target)
return imid;
else if (vector[imid].id < target)
imin = imid + 1;
else
imax = imid - 1;
}
return ULONG_MAX; // -1 isn't an option
}
然后用数组的开头调用它:
unsigned long index = bi_search(nodes, nnodes, 0);
我有这个数据结构的数组:
typedef struct {
unsigned long id; // Node identification
char *name;
double lat, lon; // Node position
} node;
我想通过 id 进行二进制搜索。 我试过这样定义函数
unsigned long bi_search(unsigned long *Vector, unsigned long Vlen, unsigned long target) {
imin = 0; imax = Vlen-1;
while (imax > imin) {
imid = (imax + imin)/2;
if (Vector[imid] == target) {
return imid;
}
else if (Vector[imid] < target) {
imin = imid + 1;
}
else {
imax = imid - 1;
}
}
return -1;
}
并用
调用它bi_search(&nodes->id, nnodes, 0)
该函数适用于向量,但我无法使其在结构数组内部进行搜索。
您需要调整搜索函数的签名和调用方式。
您必须使用指向结构类型数组的第一个元素的指针。在函数内部,您将使用 vector[i].id
访问数组的第 i
th 元素的 id
成员。
unsigned long bi_search(node *vector, unsigned long vlen, unsigned long target)
{
unsigned long imin = 0;
unsigned long imax = vlen - 1;
while (imax > imin)
{
unsigned long imid = (imax + imin) / 2;
if (vector[imid].id == target)
return imid;
else if (vector[imid].id < target)
imin = imid + 1;
else
imax = imid - 1;
}
return ULONG_MAX; // -1 isn't an option
}
然后用数组的开头调用它:
unsigned long index = bi_search(nodes, nnodes, 0);