【问题标题】:Stock information data structure for c?c的股票信息数据结构?
【发布时间】:2012-06-08 17:08:32
【问题描述】:

我是 C 的新手(不到一周),正在尝试找出一种更有效的方法来检索数据。基本上想象我有几条股票数据:股票代码、价格、变化。

到目前为止,我的方法是将所有数据放入 3 个数组中。如果我想要 IBM 的价格,我会搜索代码数组并获取索引位置,然后从价格数组中获取该位置。它工作得很好,但是因为我做了很多查找并且我的数据没有改变,所以我想知道是否有更有效的方法来做到这一点?

我试图寻找一个字典/哈希图来存储 IBM 作为键和一组价格/变化作为值,但我似乎无法弄清楚如何在 C 中执行此操作。如果可能的话一个简单的方法来做到这一点?我正在开发一个不同的程序,并且真的不想学习如何从头开始创建自己的程序(尽管如果必须,我肯定会处理它)。

【问题讨论】:

  • 您可以使用struct 对相关信息进行分组。当然,您可以使用一些公共域哈希表代码进行查找。 stackoverflow.com/questions/1138742/…
  • 你真的应该切换到 C++。然后你就有了 list、map、unordered_map 等等。

标签: c data-structures


【解决方案1】:

试试这个: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;
    }
}

【讨论】:

  • 非常感谢。我还在学习,每次添加新条目时是否需要 malloc,或者如果我想添加 ibm 和价格/更改,hash_add_str 会为我做这一切吗?上面的命令有吗?
  • @Error_404 我添加了更多示例。是的 - 当你将一个项目添加到哈希时,你必须 malloc 内存,当你完成时 free。
猜你喜欢
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多