Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_infa.docx
Скачиваний:
1
Добавлен:
04.08.2019
Размер:
187.42 Кб
Скачать
  1. Динамические структуры.

Под динамическими структурами наш дорогой преподаватель понимает массив структуры,память под который выделана динамическии.Пример:

#define N=7

struct NOTE{

char name[10];

char surname[20];

char phone[10];

unsigned int dr[4];

}dbase[N]

Здесь dbase[N] динамическая стуктура. Дальше втирайте ему про динамическое распределение памяти.

з.ы. Динамическая память — оперативная память компьютера, предоставляемая программе (процедуре, подпрограмме) при её работе. Динамическое размещение данных означает распределение динамической памяти непосредственно при работе программы или процедуры (подпрограммы). В отличие от этого статическое размещение осуществляется в момент запуска программы или процедуры. На этапе компиляции не известны ни тип, ни количество динамически размещаемых данных.

с надеждой на понимание чеширский кот.

Динамические структуры данных

 

Можно выделить следующие основные классы динамических объектов:

·  упорядоченные совокупности характеризуются тем, что для них значим физический порядок встраивания элементов. Пример - массивы;

·  неупорядоченные совокупности или коллекции - физический порядок объектов в представлении данных незначим, встраивание объектов в коллекцию произвольно. Примеры -  хэши, одно‑ и двусвязные списки, деревья;

·  последовательности - физический порядок объектов в представлении данных незначим, но значим порядок вставки/удаления, которые выполняются только в определенных точках последовательности. Примеры -  стеки, очереди.

Существуют 2 основных возможности для организации динамических структур:

·  библиотеки функций classlib;

·  организация динамических наборов структур, связанных указателями на структурные типы.

Реализация динамических структур через предопределенные классы требует подключения библиотеки TCLASSS.LIB (если выбрана модель Small, также есть TCLASSL.LIB для Large) из папкиBORLANDC\CLASSLIB\LIB к файлу проекта, а также включения в строку опций Include Directories маршрута \BORLANDC\CLASSLIB\INCLUDE. Если предположить, что среда установлена в папкуd:\BORLANDC, настройки путей могут иметь следующий вид:

Include Directories:

d:\BORLANDC\INCLUDE; d:\BORLANDC\CLASSLIB\INCLUDE; d:\BORLANDC\TVISION\DEMOS;.

Library directories:

d:\BORLANDC\LIB;d:\BORLANDC\TVISION\LIB;

d:\BORLANDC\CLASSLIB\LIB;.

Output Directory: .

Source Directories: d:\BORLANDC\BIN;.

Подробное рассмотрение иерархии классов библиотек classlib можно найти в специальной литературе, в данном пособии мы подробнее рассмотрим независимое программирование динамических списков структур.

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

В простейшем случае односвязный (однонаправленный) список имеет одно информационное поле и один указатель на следующий элемент:

typedef struct list {

 list * next;

 int info;

};

Для работы с элементами такого списка достаточно определить статический указатель на начало списка

list * head;

и хотя бы один "буферный" элемент, который будет служить для ввода и временного хранения данных:

list work;

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

Например, функция вывода всех элементов списка, использующая глобальный указатель root на его вершину, могла бы иметь следующий вид:

struct list *root;

 //Указатель на вершину списка

void List (void) {

 struct list *iter = root;

 int i = 0;

 while(iter != NULL) {  

  //Пока указатель не пуст

  printf ("\n элемент %2d: (%d)",

   i++,iter->info);

  //Напечатать очередной элемент списка

  iter = iter->next;

  //и перейти к след. элементу

 }

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]