Всем привет. Я давно не работал на C++, знакомый учится в универе ,просил помочь.
Задача реализовать список студентов при помощи очереди.
Предусмотреть возможность удаления студента по фамилии.
Так вот при попытке отобразить новый список после удаления, программа бросает исключение об ошибке доступа к памяти.
Хотя вроде, после удаления достаточно присвоить указателю на удаляемый элемент адрес следующего элемента.
День мучаюсь с этим.
Реализация удаления по имени
Задача реализовать список студентов при помощи очереди.
Предусмотреть возможность удаления студента по фамилии.
Так вот при попытке отобразить новый список после удаления, программа бросает исключение об ошибке доступа к памяти.
Хотя вроде, после удаления достаточно присвоить указателю на удаляемый элемент адрес следующего элемента.
День мучаюсь с этим.
C++:
//Реализация очереди
template <class T>
struct BaseQueue
{
T Element;
BaseQueue* nextNode;
};
template <class T>
void InsertToQueue(BaseQueue<T>** pFirstElement, T pElement)
{
BaseQueue<T>* currentElement = *pFirstElement;
BaseQueue<T>* previous = nullptr;
BaseQueue<T>* newNode = nullptr;
while (currentElement)
{
previous = currentElement;
currentElement = currentElement->nextNode;
}
newNode = new BaseQueue<T>;
newNode->Element = pElement;
if (previous)
{
newNode->nextNode = nullptr;
previous->nextNode = newNode;
}
else
{
*pFirstElement = newNode;
(*pFirstElement)->nextNode = nullptr;
}
}
template<class T>
void DeleteElementFromQueue(BaseQueue<T>** pFirstElement)
{
BaseQueue<T>* oldItem = *pFirstElement;
if (*pFirstElement)
{
*pFirstElement = (*pFirstElement)->nextNode;
delete oldItem;
}
}
Код:
void DelStudentByName(BaseQueue<Student>** pStudentQueue, const char *pFullName,SearchStatus &status)
{
BaseQueue<Student>* current = *pStudentQueue;
BaseQueue<Student>* previous = nullptr;
status = SEARCH_QUEUE_EMPTY;
while (current)
{
status = SEARCH_QUEUE_NOT_FINDED;
if (strstr(current->Element.FullName, pFullName))
{
status = SEARCH_QUEUE_SUCCESS;
DeleteElementFromQueue(¤t);
break;
}
previous = current;
current = current->nextNode;
}
}