Я создал функцию вставки, которая добавляет идентификатор ученика, имя, фамилию и адрес электронной почты в массив связанного списка. Я должен создать другую функцию, которая проверяет, доступен ли определенный ученик, и обновляет его электронную почту, но я не знаю, с чего начать с этой функции.
ЗАГОЛОВОК ФАЙЛА
#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 ответ
Вы должны хранить
firstName
,lastName
иemail
как три отдельных поляstring
вHashNode
вместо того, чтобы объединять их вinsert
. Это избавит вас от множества головных болей.В функции
update
вам необходимо просмотреть связанный список, в который учащийся был (или мог быть) добавлен; то есть, начиная сtable[hash(ID)]
(кстати,table[index]
совпадает с*(table + index)
, по крайней мере, для указателей [массивы часто рассматриваются как указатели в C и C ++]). Вам нужно найти узел, у которого есть ключ, который вы ищете (если есть), и обновить его адрес электронной почты.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .