【问题标题】:Need help understanding a list container需要帮助了解列表容器
【发布时间】:2013-11-06 04:48:21
【问题描述】:

我不确定这个链接列表会是什么样子。

list<string> hashTable [HASH_TABLE_SIZE];

我相信这个:

list<string> hashTable;

看起来像这样:

Head->[]->[]->[]->NULL

但是什么

list<string> hashTable [HASH_TABLE_SIZE];

看起来像?

【问题讨论】:

  • 第一个不是链表;它是一个链表数组。将你所拥有的单个实例取出,并绘制多个,每个到它们自己的数组槽中。
  • @WhozCraig 是对的,但是您可以拥有一个链表的链表......并且可以再嵌套。

标签: c++ arrays list linked-list


【解决方案1】:

看起来像这样:

[Head][Head][Head]...
  ^     ^      ^
  |     |      |
  v     v      v
 [ ]   [ ]    [ ]
  ^     ^      ^
  |     |      |
  v     v      v
 NULL  NULL   NULL

【讨论】:

    【解决方案2】:

    这是一个std::list的数组,一个std::list的数组,一个std::list可以向前和向后迭代,所以它实际上是一个双向链表。看起来更像下图

    每个:

    hashTable[index]:
    
      begin()-*          *-rbegin()
              |          |
              v          v
      rend()<-[]<->[]<->[]->end()
    
    /* walk index'th list in hashTable in forward order and print it out */
    int f = 0;
    list<string>::iterator fwdItr = hashTable[index].begin();
    for (; fwdItr != hashTable[index].end(); ++f, ++fwdItr)
    {
        printf("fwd list entry %d = %s\n", f, *fwdItr);
    }
    
    
    /* walk index'th list in hashTable in reverse order and print it out */
    int r = 0;
    list<string>::reverse_iterator revItr = hashTable[index].rbegin();
    for (; revItr != hashTable[index].rend(); ++r, ++revItr)
    {
        printf("rev list entry %d = %s\n", r, *revItr);
    }
    

    希望这有助于更好地说明 std::list ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2016-05-03
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多