Структуры, указатели и деревья в C - PullRequest
3 голосов
/ 29 апреля 2011

В нашем последнем семестровом проекте всем в моем классе «Операционные системы» была поручена реализация псевдо «файловой системы linux».Идея состоит в том, чтобы симулировать обработку файлов, папок, изменение каталогов и т. Д.

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

typedef struct floorNode
{
    char floorName[30]; //the name of the tree node
    struct floorNode *parentPointer; //this is a pointer to the parent node. Null for the root node.
    struct floorNode *childPointers[10]; //this is an array holding pointers to up to 10 child nodes. 
    char fileArray[10][30]; //this is an array of 10 'files', each of up to length 30.
                            //for this assignment, strings are the only type of "file"

} floorNode;

Это правильный способ реализации дерева в C?

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Это более или менее правильный тип данных.

Я беспокоюсь о fileArray[][]. Я не думаю, что это необходимо, если только я неправильно понимаю его цель. Чтобы получить floorName детей, вместо этого пройдите childPointers[], чтобы получить имя у детей.

Что нужно учитывать, если узлы имеют 30 символьных строк, так это сделать хранилище для всех из них немного больше, в данном случае 31, чтобы всегда присутствовал конечный NUL и не требовалась специальная обработка, чтобы различать Строка из 30 символов без NUL и все более короткие строки, в которых они есть.

0 голосов
/ 29 апреля 2011

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

...