2012-04-06 2 views
1

В качестве части программирования Assignment я должен поддерживать связанный список в текстовом файле. Я довольно удобен с datastructure Linked List, но не столько с файлами на C++. Может кто-нибудь дать мне идею или обзор того, как подойти к ней. Я должен иметь возможность добавлять или удалять связанный список, а также добавлять или удалять узлы в связанном списке или иначе и использовать повторное использование пространства, которое было удалено в одном связанном списке. Каждый список имеет число (целое число), все узлы одного размера, содержат целое число.Поддержание связанного списка в файле

Моя идея была бы,

1) сохранить файл с номерами (которые содержат связанный из списка номеров)

0 - NULL 
1 - head_offset for_linked_list_num 1 
0 - NULL 
1 - head_offset_for_linked_list_num 3 
1 - head_offset_for_linked_list_num 3 
1 - head_offset_for_linked_list_num 3 

и т.д. где -1 является указание termiator, 1 в положении указывает на то, Ith местоположение имеет местоположение, связанное с ним

2) открыть другой файл и сохранить связанный список как этот

data next_offset 
data next_offset 
data NULL 

Выполняя это, я могу отслеживать связанный список и эффективно добавлять/удалять/отображать массив.

Для выполнения на C++ каких функций мне нужно знать и учиться. У меня очень мало времени, и я могу сформулировать это как базовый уровень функций. Пожалуйста, порекомендуйте. Заранее спасибо

+0

Нужно ли вам поддерживать один список ссылок или несколько списков? – Wizetux

+0

несколько списков, но я думаю, что узлы могут обмениваться между собой. Кстати, насколько бы вы оценили назначение из 10. Несмотря на то, что в C++ для программирования более 2 лет, я чувствую, что это как-то сложно. – howtechstuffworks

+0

Возможно, действительно глупый вопрос, но почему бы вам просто не сохранить один элемент в строке? Удалить элемент, удалить строку. , вставьте строку. – bitmask

ответ

0

1 решение может состоять в том, чтобы каждый список был собственным файлом. Номер будет именем файла на диске. Внутри файла первая строка всегда является головным узлом. Каждая строка была бы двумя точками данных. Данные узла, за которыми следует строка в файле для следующего узла. Это позволит вам повторно использовать пустые пробелы, которые были удалены. (-1 для следующей строки узла будет конец списка Например:

1.txt:.

(data) (next node lines number) 
18  2 
32  4 
4  -1 
5  3 

Так что этот список ссылок будет 18 -> 32 -> 5 -> 4

+0

Я предполагаю, что это тот дизайн, к которому я собираюсь сейчас. Дам вам знать. Благодарю. Btw, Можете ли вы дать мне пример того, как перейти к определенной строке ??? – howtechstuffworks

+0

Я предполагаю, что потребуется много итераций. – howtechstuffworks

+1

Если вы хотите уменьшить итерации и не считать весь файл в памяти за один раз, вам следует, вероятно, изучить чтение/запись файла в двоичном формате, чтобы вы могли искать в местах в файл.Тогда последним значением будет позиция поиска следующего элемента, а не номера строки. Плюс, так как данные имеют одинаковый размер (Integer), вы знаете, сколько байтов занимает каждый, что просто кричит двоичный формат файла. IMO – Wizetux

Смежные вопросы