簡體   English   中英

在 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元素的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM