Я не понимаю, как будет работать механизм вставки, кто-то получит его (нужно использовать массив связанных списков в качестве цепочки)? - PullRequest
0 голосов
/ 15 апреля 2020

Я создал функцию вставки, которая добавляет идентификатор ученика, имя, фамилию и адрес электронной почты в массив связанного списка. Я должен создать другую функцию, которая проверяет, доступен ли определенный студент, и обновлять его электронную почту, но я не знаю, с чего начать с этой функцией

ФАЙЛ ГОЛОВКИ

#pragma once
#include <iostream>
#include <string>
using namespace std;
class HashTable
{
private:
    struct HashNode
    {
        string key;
        string value;
        HashNode* next;
    };
    HashNode* table[100];
    int currentSize;
    int maxSize;
public:
    HashTable(int x);
    void insert(string ID, string firstName, string lastName, string email);
    bool update(string ID, string newEmail);
};

CPP ФАЙЛ

HashTable::HashTable(int x)
{
    maxSize = x;
};


 void HashTable::insert(string ID, string firstName, string lastName, string email)
{
    HashNode x;
    x.key = ID;
    x.value = firstName + " " + lastName + " " + email;
    int index = hash(x.key);
    if (*(table + index) == NULL)
    {
        *(table + index) = new HashNode;
        (*(table + index))->key = x.key;
        (*(table + index))->value = x.value;
        (*(table + index))->next = NULL;
    }
    else
    {
        HashNode* temp = *(table + index);
        while (temp->next != NULL)
            temp = temp->next;
        HashNode* newNode = new HashNode;
        newNode->key = x.key;
        newNode->value = x.value;
        newNode->next = NULL;
        temp->next = newNode;
        temp = NULL;
        newNode = NULL;
    }
    currentSize++;
};

1 Ответ

0 голосов
/ 16 апреля 2020
  1. Вы должны хранить firstName, lastName и email как три отдельных поля string в HashNode вместо их объединения в insert. Это избавит вас от многочисленных головных болей.

  2. В функции update вам нужно отсканировать связанный список, к которому студент был (или мог бы) быть добавлен; то есть, начиная с table[hash(ID)] (кстати, table[index] совпадает с *(table + index), по крайней мере, для указателей [массивы часто обрабатываются как указатели в C и C ++]). Вам нужно найти узел с ключом, который вы ищете (если есть), и обновить его адрес электронной почты.

...