[英]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
個元素的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.