Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(это программирование 2й семестр).docx
Скачиваний:
39
Добавлен:
15.05.2015
Размер:
45.99 Кб
Скачать
  1. Управление выполнением директив.

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

    2. Набор директив может исключить фрагмент программы из процесса компиляции. Если if определена, то повторно она не определяется, а в последующем можно переопределить ее значение. (см вопрос 32)

  2. Понятие динамической структуры. Виды динамических структур. Их отличие друг от друга.

До начала ввода данных неизвестно, сколько памяти нужно выделить, поэтому требуются динамические структуры.

Память выделяется по необходимости отдельными блоками, связанными друг с другом с помощью указателей.

Из динамических структур чаще всего используются линейные списки, стеки, очереди и деревья.

Линейные списки односвязные и двусвязные

Может занимать несмежные участки памяти и в процессе программы элементы структуры могут удаляться

или добавляться

Элемент любой динамической структуры данных состоит из полей, часть из которых для связи с соседними

элементами.

Описание элемента линейного списка для хранения целых чисел

struct node

{

node *next;

int a;

};

  1. Организация списка на основе массива.

В зависимости от решаемой задачи используются разные динамические структуры

Связанные списки

Пример: организация списка на основе массива.

struct data

{

char name[30];

char phone[10];

int age;

}list [100];

________________________________________________

| name | phone | age |name | phone | age |

| | | | | | |

-------------------------------------------------------

| list[0] | list[1] |

  1. Возможная структура элемента связного списка.

ДИНАМИЧЕСКИЙ ВИД:

____________________________________________________________

|name|phone|age|next|->|name|phone|age|->NULL |

| | | | |->| | | |-> |

---------------------------------------------------------------------

struct data

{

char name[20];

char phone[10];

int age;

data *next;

};

  1. Однонаправленные и двунаправленные связные списки.

    1. Двунаправленный список – список, в котором каждый элемент структуры имеет 2 указателя, на следующий элемент и на предыдущий.

    2. Однонаправленный список – список, элементы которого имеют только по одному указателю – указателю на следующий элемент.

  2. Добавление узлов в разные части связного списка.

struct data

{

data *next;

char name[20];

};

data *start=NULL;

data *add=NULL; //указатель на новый добавляемый элемент

data *del=NULL; //указатель на удаляемый элемент

data *cur=NULL; //указатель на текущий эл-т

    1. //Добавление в начало связанного списка

...

add=new data; //Указывает на созданный узел

add->next=head; //Засовывает в начало

gets(add->name); //Ввод данных в информационное поле

head=add; //Указывает на вставленный в список элемент

...

    1. //Добавление узла в конец

...

cur=head;

while(cur->next!=NULL)

{cur=cur->next;}

cur->next=new data;

gets((cur->next)->name);

...