Member 14849148 Ответов: 3

Концепция связанного списка сомнение


in linkedlist why we write (struct node *root) rather than (struct node root) . idont under stand this pls tell .. or in append case (struct node *temp) rather than (struct node temp)


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

я не получаю никакого обоснованного ответа в учебниках, поэтому пришел сюда.

3 Ответов

Рейтинг:
8

Greg Utas

То * означает, что это указатель к struct, а не копия всего этого. struct Каждый элемент в списке является struct это также имеет указатель к следующей структуре в списке.

Для append функция, элемент, который в данный момент является последним, нуждается в указателе на struct это будет добавлено (таким образом, *), а не а копировать из него (а именно то, что он получил бы, если бы * был опущен).


Member 14849148

- спасибо, сэр.

Greg Utas

Пожалуйста.

Рейтинг:
24

Richard MacCutchan

Это определяет структуру, которая содержит узел (что бы это ни было).

struct node root; // root is a node struct so may contain many variables.

Это определяет указатель на структуру узла.
struct node *root;  // root is a pointer to a node struct

В связанном списке каждый элемент должен быть связан со следующим (и/или предыдущим) элементом. Это можно сделать с помощью указателя на элемент. Затем вы можете пройти по списку, взяв каждый указатель по очереди. Например, что-то вроде следующего кода:
struct node* next = head; // head points to the first item in the list
while (next != NULL)
{
    next = next->root; // get the address of the next node in the list
    // if it is null (i.e. the end of the list) the while loop will terminate.
}


Member 14849148

спасибо, сэр, теперь мне все очень ясно.

Richard MacCutchan

Добро пожаловать.

Рейтинг:
17

Rick York

Данные связанного списка могут быть связаны различными способами. Ссылки могут быть индексами в массиве или указателями на другие узлы, и есть другие способы. Чаще всего они реализуются в виде указателей. В этом случае заголовок списка сохраняется как указатель на корневую запись. Это очень упрощает замену корня списка - это просто операция присвоения указателя. Это основное преимущество связанных списков на основе указателей : быстро и легко вставлять и удалять элементы из списка. Сортировка также выполняется быстро, поскольку никакие данные не должны быть перемещены или скопированы - переназначаются только указатели.

Основная причина, по которой указатель используется вместо экземпляра, заключается в том, что поддерживать ссылки списка гораздо проще с помощью указателей вместо экземпляров. Вам не нужно перемещать или копировать данные, как если бы вы использовали экземпляр. Рассмотрим вопрос: как выглядит пустой список, если в качестве корневого элемента использовался экземпляр? С указателями пустой список является нулевым корневым указателем. С примером, обобщенно указывающим на несуществование, может быть проблематично.