2012-06-04 121 views
0

我剛剛接觸C(不到一週),並試圖找出更有效的檢索數據的方法。基本上可以想象我有幾個股票數據:股票代碼,價格,變化。c的股票信息數據結構?

我到目前爲止的做法是將所有數據放在3個數組中。如果我想要IBM的價格,我搜索股票代碼數組並獲取指數位置,然後從價格數組中獲取該位置。它工作正常,但因爲我做了很多查找,我的數據沒有改變,所以我想知道是否有更有效的方法來做到這一點?

我試圖尋找一個字典/散列映射可能存儲IBM作爲一個關鍵和價格/變化作爲值的數組,但我似乎無法弄清楚如何在C中做到這一點。如果它可能是有一個簡單的方法來做到這一點?我正在研究一個不同的程序,真的不想學習如何從頭開始創建自己的程序(儘管如果我必須這樣做,我會確定它會對它起作用)。

+2

您可以使用'struct'來分組相關的信息。當然,有一些公有領域的hashtable代碼可以用於查找。 http://stackoverflow.com/questions/1138742/looking-for-a-good-hash-table-implementation-in-c –

+2

你真的應該只是切換到C++。然後你就有了list,map,unordered_map等等。 –

回答

5

試試這個:http://uthash.sourceforge.net/

頭版上的例子是相當多的自我解釋。

struct Stock { 
    float price, change; 
    char name[3]; 
    UT_hash_handle hh; 
}; 

struct Stock * stocksHash = NULL;  
struct Stock * stockItem; 
HASH_ADD_STR(stocksHash, name, stockItem); 
HASH_FIND_STR(stocksHash, "IBM", stockItem); 

//edit 
void new_stock(struct Stock * stocksHash, char *name, float price, float change) { 
    struct Stock *s; 

    s = malloc(sizeof(struct Stock)); 
    strncpy (s->name, name, 3); 
    s->price = price; s->change = change; 
    s->id = user_id; 
    HASH_ADD_STR(stocksHash, name, s); 
} 

void update_stock (struct Stock * stocksHash, char *name, 
        float price, float change) { 
    struct Stock *s; 
    HASH_FIND_STR (stocksHash, name, s); 
    if (s) { 
     s->price = price; s->change = change; 
    } 
} 
+0

+1。好東西。未來應該有用。 :) – Tudor

+0

非常感謝。我還在學習,每次添加新條目時是否需要malloc,或者如果我想添加ibm和價格/更改,hash_add_str會爲我完成這一切嗎?上面的命令是否存在? –

+0

@ Error_404我增加了一些例子。是的 - 當你將項目添加到散列時,你必須將'malloc'指定爲內存,當你完成時,你需要'free'。 – wroniasty