У меня проблемы с моим методом связного списка

Я реализовал этот класс раньше, но он не работает. Я получаю ошибку в enqueue(edge) метод. Отладчик говорит, что голова не пуста, но она должна быть. Кто-нибудь может объяснить почему?

Это код:

class eList
{
private:
class node
{
public:
edge e;
node * next;

node(edge x)
{
next = NULL;
e = x;
}
};

node * head, *tail;

public:
eList()
{
head = NULL;
tail = head;
}

Это метод, где я получаю ошибку:

    void enqueue(edge component)
{
node * bby = new node(component);
if (head == NULL)
{
head = bby;
tail = head;
}
else
{
tail->next = bby;
tail = bby;
}
}
};

Как этот список используется:

class edgeTable
{
private:
//hash table conists of a table of lists
eList * table;
//size of table
int capacity;

//number of items in hash table
int numItems;

int createKey(edge e) {

unsigned int k1 = e.start->address * 37;
unsigned int k2 = e.end->address * 37;
return k1+k2%capacity;
}
int createKey(int addss) { return addss%capacity; }

void resize()
{
int oldCap = capacity;
capacity = capacity * 2;
edgeTable resized(capacity);

for (int i = 0; i < oldCap;i++)
resized.insert(table[i].strct());

table = resized.table;
}

void insert(int key, edge e)
{
table[key].enqueue(e);
numItems++;
}

public:
edgeTable()
{
capacity = 101;
table = new eList[capacity];
numItems = 0;
}

edgeTable(int cap)
{
capacity = cap;
table = new  eList[capacity];
numItems = 0;
}

void insert(edge e)
{
insert(createKey(e), e);
if (numItems >= capacity / 2)
resize();
}

и этот класс используется для:

void addEdge(int x, int y, int w)
{
vertex * u = findVertex(x);
vertex * v = findVertex(y);

edge e(u,v,w);
u->edgeList.insert(e);
}

РЕДАКТИРОВАТЬ: добавлен дополнительный код.

0

Решение

Пока я не могу добавить комментарий, поэтому я отвечаю, примите это как комментарий.

void enqueue(edge component) на самом деле нет проблем с этим, но я думаю, что у вас проблема в void insert(edge e) с insert(createKey(e), e); особенно createKey(e) ,

в createKey k1+k2%capacit не равно (k1+k2)%capacity
ты хочешь этого или нет? потому что это ключ, это значит индекс для массива и, возможно, вернуть неправильный индекс

извините нужно 50/50, чтобы комментировать!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]