Atul Khanduri Ответов: 1

Преобразование связанного списка в массив и наоборот


Всем привет,

Я написал шаблон связанного списка, но мне было интересно, как я могу преобразовать список (после того, как он будет создан) в массив, а затем обратно в список?

Я попробовал простой фрагмент кода, но он не является правильным.

arr[i] = root->data;


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

Так что, пожалуйста, помогите....

1 Ответов

Рейтинг:
11

Ron Beyer

Связанный список сконструирован таким образом, что он не занимает смежный раздел памяти, как это делает массив. Единственный способ преобразовать LL в массив-это скопировать данные в смежный раздел памяти элемент за элементом, что-то вроде этого псевдокода:

LinkedList current = root;
datatype[] array = new array[linked_list_count];
int i = 0;

while (current->next != null)
{
    array[i] = current->data;
    current = current->next; 
    i++;   
}


Это немного сложнее, если это действительно C (а не C++), так как вы должны выделить правильный объем памяти и увеличить значение указателя на размер типа данных. Вы также можете создать массив указателей и просто заполнить его местоположением каждого типа данных linkedlist->, который больше похож на неглубокую копию связанного списка.


nv3

5.

Atul Khanduri

Это сложнее в C (не C++), это означает, что в C++ у нас есть какие-то специальные функции для этого??

Ron Beyer

Нет, это просто означает, что в C++ вы можете использовать другие операции с указателями, но процесс тот же самый, и управление памятью проще.

Atul Khanduri

Хорошо, сэр, спасибо...

Sergey Alexandrovich Kryukov

Конечно, 5.
—СА