ВУЗ:
Составители:
Рубрика:
25
typedef struct tag_lib {
char title[100];
char author[100];
int year;
} LIB;
Каждая строка хранится в памяти независимо от местоположения предыдущих
и последующих строк, но имеет указатель на предыдущую и последующую
строки таблицы. Благодаря этому обеспечивается единство таблицы. Таким
образом, необходимо ввести еще одну структуру, которая будет описывать
связи между строками таблицы, и представлять собой объект данных:
typedef struct tag_obj {
LIB lib;
LIB* prev, *next;
} OBJ;
Здесь *prev и *next – указатели на предыдущую и следующую строки
соответственно.
По умолчанию указатели head и tail равны NULL:
OBJ* head = NULL, *tail = NULL;
При добавлении записей выполняется инициализация этих указателей, а также
prev и next внутри объектов:
OBJ* add_obj(char* title, char* author, int year)
{
OBJ* current = (OBJ *)malloc(sizeof(OBJ));
strcpy(current->lib.title, title);
strcpy(current->lib.author, author);
current->lib.year = year;
current->prev = tail;
current->next = NULL;
if(tail != NULL) tail->next = current;
if(head == NULL) head = current;
tail = current;
return current;
}
Данная функция использует три параметра для ввода данных в структуру
LIB. В первой строке функции создается новая структура типа OBJ. Во второй,
третьей и четвертой строках осуществляется запись информации в структуру
LIB. Затем, инициализируются указатели prev и next добавленного объекта.
Учитывая, что добавление осуществляется в конец списка, то указатель next
должен быть равен NULL, а указатель prev
указывать на предыдущий объект,
т.е. быть равен указателю tail. В свою очередь, объект, на который указывает
указатель tail, становится предпоследним и его указатель next должен указывать
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »