Разница между указателем на узел и узлом как целым объектом?

#c #list #pointers #doubly-linked-list

#c #Список #указатели #двусвязный список

Вопрос:

Если у меня есть структура: /* Структура связанного списка */

 struct list 
{
   struct list *prev;
   int data;
   struct list *next;
} ** *node = NULL, *first = NULL, *last = NULL, *node1 = NULL, *node2 = NULL**;

class linkedlist {
public: 

    /* Function for create/insert node at the beginning of Linked list */
    void insert_beginning() {
        **list *addBeg = new list;**
        cout << "Enter value for the node:" << endl;
        cin >> addBeg->data;
        if(first == NULL) {
            addBeg->prev = NULL;
            addBeg->next = NULL;
            first = addBeg;
            last = addBeg;
            cout << "Linked list Created!" << endl;
        }
        else {
            addBeg->prev = NULL;
            first->prev = addBeg;
            addBeg->next = first;
            first = addBeg;
            cout << "Data Inserted at the beginning of the Linked list!" << endl;
        }
    }
  

В чем СИНТАКСИЧЕСКАЯ разница между созданием нового узла (с двумя указателями и данными) и всего лишь одним указателем, отделенным от узла, для использования в той же программе. (Разница между выделенными жирным шрифтом частями)

Комментарии:

1. Я не могу понять, о чем вы спрашиваете. Не могли бы вы, возможно, включить примеры обеих альтернатив, которые вы имеете в виду?

2. Загуглите «итак, список книг по c «.

3. Что вы подразумеваете под различием синтаксиса? У вас должен быть указатель на предыдущий узел и следующий узел, чтобы иметь возможность перемещаться вперед и назад в вашем связанном списке или любой другой структуре данных, которая у вас есть. Это просто зависит от того, что вы разрабатываете

4. Когда вы говорите «создание», вы имеете в виду в стеке (например, int n; ) или в куче (например, int *p = new int; )?

5. Вы говорите о двусвязном списке (предыдущий, следующий) по сравнению с односвязным списком (следующий)?

Ответ №1:

Вот несколько примеров.

Объявление node переменной

 node n;
  

Здесь n указана переменная или экземпляр типа node .

Объявление указателя на node тип

 node * pointer_to_node;
  

Обратите внимание на * после идентификатора типа. * Используется для объявления указателей.

Также обратите внимание, что указатель ни на что не указывает.

Наведение указателя
Указатель может указывать на что угодно своего типа. Итак, допустимо следующее:

 node n;
node * pointer_to_node = amp;n;
  

В приведенном выше примере pointer_to_node инициализируется, чтобы указывать на переменную n .

 node * pointer_to_dynamic = new node;
  

В приведенной выше инструкции программа выделяет node экземпляр в динамической памяти. pointer_to_dynamic Переменной присваивается местоположение памяти. Другими словами, переменная pointer_to_dynamic теперь указывает на недавно выделенную динамическую память.