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

ЗАГОЛОВОК ФАЙЛА

#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++;
};
-2
Youssef Hossam 15 Апр 2020 в 17:47

1 ответ

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

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

0
numzero 15 Апр 2020 в 22:50