

連結リストを要素に持つ配列のハッシュテーブルを作ったつもりです。今回の目的は、そのハッシュテーブルにaddItemでデータを追加して、displayTableでそのハッシュテーブルの内容を返すような関数作りです。このプログラムを実行すると０が返ってこず、プログラムが停止してします。いろいろ試した結果、おそらく問題はdisplayTableメソッドの内のwhile
loopまたはLink* temp = array[i]->getHead()だと思います。わかる方よろしくお願いします。

**HashList.h**

[code]

    #include <iostream>
    #include <sstream>
    
    using std::string;
    
    class Link
    {
    private:
        string value;
        Link* next;
    public:
        Link(string value, Link* next = nullptr){this->value = value; next = nullptr;}
        ~Link(){}
        string getValue(){return value;}
        Link* getNext(){return next;}
        void setNext(Link* next){this->next = next;}
    };
    
    class List
    {
    private:
        Link* head;
    public:
        List(){head = nullptr;}
        void addHead(string value)
        {
            Link* temp = new Link(value, head);
            temp->getNext();
            head = temp;
        }
        Link* getHead(){return head;}
    
    };
    
    
    class HashList {
    private:
        int arraySize;
        List** array;
    public:
        HashList(){
            arraySize = 7;
            array = new List*[arraySize];
            for(int i = 0; i < arraySize; i++)
            {
                array[i] = new List;
            }
        }
    
        HashList(int size)
        {
            if(size < 7)
            {
                size = 7;
            }
            arraySize = size;
    
            array = new List*[arraySize];
            for(int i = 0; i < arraySize; i++)
            {
                array[i] = new List;
            }
        }
    
        int hash(string value)
        {
            int hashValue = 0;
    
            //figure out the index
            for(int i = 0; i < value.length(); i++)
            {
                hashValue *= 128;
                hashValue += value[i];
                hashValue %= arraySize;
            }
    
            //return the index
            return hashValue;
        }
    
    
        void addItem(string value)
        {
            array[hash(value)]->addHead(value);
        }
    
        string displayTable()
        {
            std::stringstream ss;
            string output;
    
            for(int i = 0; i < arraySize; i++)
            {
                Link* temp = array[i]->getHead();
    
                if(temp == nullptr)
                {
                    ss << "_empty_";
                }
    
                while(temp != nullptr)
                {
                    ss << temp->getValue() << " ";
                    temp = temp->getNext();
                }
    
                ss << "\n";
    
            }
    
            output = ss.str();
    
            return output;
        }
    
    };
    
[/code]

**main.cpp**

[code]

    #include <iostream>
    #include "HashList.h"
    
    using namespace std;
    
    int main() {
        HashList test;
    
        test.addItem("Hello");
    　　test.addItem("Hello");
        cout << test.displayTable() << endl;
    
    
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2021-10-22T08:08:56.787
83214
2021-10-22T09:34:34.223
2021-10-22T09:17:02.180
19110
45177
question
c++
自作ハッシュテーブルが期待通りに動いていない

[code]

    Link(string value, Link* next = nullptr){this->value = value; next = nullptr;}
    
[/code]

ここの `next = nullptr` は無意味です。こうしたかったでしょ：

[code]

    Link(string value, Link* next = nullptr){this->value = value; this->next = next;}
    
[/code]


CC BY-SA 4.0
2021-10-22T09:34:34.223
83218
2021-10-22T09:34:34.223
40660
83214
answer