#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
теперь указывает на недавно выделенную динамическую память.