mayashah Ответов: 4

Связанный список функция удалить потом


я делаю небольшой код для записи студента, как вещь, и я хочу удалить запись с помощью regNo. но когда я реализую эту функцию, она застревает, и программа показывает отчет об ошибке !! где мне не хватает !! кроме того, скажите мне, сортировка и обход-это одно и то же ?

Что я уже пробовал:

struct student
{
	string name;
	int regno;
	int age;
	double GPA;
	int pono;

	student() {}
	~student() {}
	struct student *next;
};

void deleteRecord()
{
	cout << endl;
	cout << "Delete record:" << endl;
	cout << endl;
	student *del;
	del = head;
	del = del->next;
	if (del->next == NULL)
		cout << "End of the list." << endl;
	else
		del = del->next;
	if (del == head)
		cout << "Beginning of list." << endl;
	else
	{
		student *prev;
		prev = head;
		while (prev->next != del)
		{
			prev = prev->next;
		}
		del = prev;
	}
	cout << endl;
	cout << "RegNo to delete: ";
	cin >> del->regno;

	if (del->next == NULL)
		cout << "Nothing follows." << endl;
	else
	{
		student *temp;
		temp = del->next;
		del->next = temp->next;
		delete temp;
	}
}

int main()
{
deleterecord()}

NotPolitcallyCorrect

Должны ли мы догадываться, какой "отчет об ошибке" вы видите на своем экране, который мы вообще не видим?

mayashah

программа перестает работать !!

mayashah

к тому же функция удаления, похоже, не работает !! любые догадки о функции !! я просто хочу удалить запись от regno.

NotPolitcallyCorrect

Хорошо изучив вашу историю, я должен сказать, что лучшее, что вы можете сделать на данный момент, - это бросить занятия и найти себе другое занятие. Вы не слушаете, что вам говорят люди, Вы отказываетесь выполнять самую основную фундаментальную часть задачи (учитесь использовать отладчик для отладки вашего кода) и тратите большую часть своего времени, пытаясь заставить других делать за вас домашнее задание (будучи вампиром-помощником). Не у всех есть навыки программирования, и нет ничего постыдного в том, что вы просто не подходите для этой задачи.

mayashah

ни один мужчина, по крайней мере, я не пытался !! если я не попытаюсь, то ты можешь насмехаться надо мной !!

4 Ответов

Рейтинг:
2

OriginalGriff

Начиная с конца вашего вопроса:

Цитата:
сортировка и обход-это одно и то же ?
Нет.
Сортировка-это процесс упорядочивания узлов таким образом, чтобы они находились в определенной последовательности. Если у вас есть четыре узла:
4 7 3 1
Затем они будут отсортированы:
1 3 4 7
Или
7 4 3 1
Если отсортировать в порядке убывания.
Траверсирование-это более простой процесс "прохождения" каждого узла от головы до хвоста, посещая каждый узел по очереди, но не меняя его содержимого или положения.

Возвращаясь к вашей "главной" проблеме: мы не знаем, какую ошибку вы испытываете, но исправление ее на самом деле является частью вашего задания.
Поэтому используйте отладчик и проследите за тем, что делает ваш код.
Это часть вашей домашней работы, и заставить код работать правильно-часть задачи: действительно, это часто самый интересный и трудоемкий бит!

Поэтому поставьте точку останова в первой строке функции и шагайте по коду, заранее определяя, что должно произойти. Сравните это с тем, что произошло, и когда они не совпадут, вы начнете понимать, почему. Вы можете использовать отладчик для просмотра содержимого переменных, а также пошагового просмотра кода построчно, а для некоторых систем вы даже можете редактировать код во время его выполнения!

Но мы не знаем, какую систему и IDE вы используете, поэтому не можем дать явных инструкций. Google для "отладчика" и названия вашей системы компиляции, и вы должны найти хотя бы основные инструкции о том, как ее использовать.


Рейтинг:
17

Jochen Arndt

Если вы хотите удалить запись с определенным regNo вы должны найти эту запись, настроить next член предыдущей записи, и удалить его. Но ваш код этого не делает.

Непроверенный пример с нуля:

void deleteRecord(int regNo)
{
    student *prev = head;
    student *temp = head;
    // Find the element.
    while (temp && temp->regNo != regNo)
    {
        prev = temp;
        temp = temp->next;
    }
    // Element has been found.
    if (temp)
    {
        // Adjust head when deleting the first element
        if (temp == head)
            head = temp->next;
        // Adjust next of previous element.
        prev->next = temp->next;
        delete temp;
    }
}


mayashah

спасибо, парень !! теперь все ясно !! буду дразнить тебя в другой раз :) ПАЛЬЦЫ ВВЕРХ

Рейтинг:
1

Patrice T

Из вашего кода список уже пуст.

Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

Richard MacCutchan

Это ваш 10-й вопрос по этому приложению, и вы все еще, кажется, не продвинулись дальше. Прекратите то, что вы делаете, и потратьте некоторое время только на ручку и бумагу, и нарисуйте логику простого связанного списка. Элементы списка должны содержать только указатель на следующий элемент и номер. Теперь подумайте о том, как бы вы пошли от начала списка, чтобы найти конкретный элемент, и как бы вы удалили этот элемент из списка. Как только у вас будет хорошее понимание логики, вы можете начать писать реальный код.

И помните, что вы не можете удалить элементы из списка, который ничего не содержит, поэтому сначала вам нужно проверить, есть ли в нем какие-то элементы.