calimero88 Ответов: 2

Как реализовать минимальную и максимальную функцию узла для связанного списка?


void max ()
{
struct node *max = (struct node*)malloc(sizeof(struct node));
struct node *min = (struct node*)malloc(sizeof(struct node));
struct node *temp = head->next;

if (head ==  NULL){ printf("list is empty\n");}
max-> data = temp-> data;
min-> data = temp-> data;
while(temp->next!=NULL)
{
if(temp->data > max->data){max->data = temp->data;}
else if (temp->data < min->data){min->data = temp->data;}
temp=temp->next;
}
printf(" min = %d // max = %d",min->data, max->data);

}



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

это функция для печати min и max связанного списка

если linkedlist i/p______ : 1 2 3 4 5 6
_______________o/p-min = 2 / max = 5

is не учитывает первый или последний узлы, как это исправить?

2 Ответов

Рейтинг:
17

OriginalGriff

Не назначайте новые узлы Max или Min и не начинайте со второго элемента!
Вместо этого установите начальные указатели Max и Min в заголовке списка:

struct node *max = head;
struct node *min = head;
struct node *temp = head;

Затем используйте их в своем цикле:
while (temp != NULL)
   {
   ...
   temp = temp->next;
   }

Внутри цикла сравните значение temp с min и max, и если вы найдете новое значение, установите соответствующий указатель на temp.

Таким образом, вы не тратите впустую память, которую вы не освобождаете, вызывая утечку памяти, и вы покрываете все элементы в списке.
Если список содержит один элемент, то max и min одинаковы: один и тот же узел.

Попробуйте: это довольно очевидно, когда вы думаете об этом!


Рейтинг:
12

Patrice T

Совет: правильно продумайте свой код,он поможет вам читать.

void max ()
{
	struct node *max = (struct node*)malloc(sizeof(struct node));
	struct node *min = (struct node*)malloc(sizeof(struct node));
	struct node *temp = head->next;

	if (head ==  NULL){ printf("list is empty\n");}
	max-> data = temp-> data;
	min-> data = temp-> data;
	while(temp->next!=NULL)
	{
		if(temp->data > max->data){
			max->data = temp->data;}
		else if (temp->data < min->data){
			min->data = temp->data;}
		temp=temp->next;
	}
	printf(" min = %d // max = %d",min->data, max->data);

}


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

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

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