Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OAIP_teoria

.doc
Скачиваний:
60
Добавлен:
11.05.2015
Размер:
116.74 Кб
Скачать

1 .Понятие рекурсии условия окончания рекурсивного алгоритма

Рекурсивный - способ построения объекта при котором определение

объекта включает в себя аналогичный объект ввиду некоторой его части.

Решать задачу рекурсивно это значит разложить её на подзадачи ,

кототорые аналогичным образом (рекурсивно ) разделяются на ещё

меньшие подзадачи .На определенном уровне задача становится на

столько простой ,что её можно решить тривиально. Исходная задача с

читается выполненной когда ,будут выполнены все подзадачи её

образующие (Стратегия разделяй и властвуй)

1)Задача разбивается на независимые подзадачи меньшей сложности.

2) Каждая подзадача решается отдельно.

3)Из отдельных решений подзадач строится решение исходной задачи.

Рекурсивной называется функция, которая содержит вызов самой себя.

Пример: вычисление (Х)! факториала.

0!=1.

N!=n*(int n)!

Int fakt(int n)

{if (n<=0) return 0;

Else return n*fact(n-1);

Условия окончания рекурсивного алгоритма.

В любом рекурсивном алгоритме обязательно следует предусмотреть

его остановку . Например ввести условия его остановки.

Например ввести условие при котором рекурсивном о

бращении к ф-ции прекращается .

Важно сделать оценку максимальной глубины рекурсии ,

чтобы убедится ,что она достаточно мала и не приведёт

к переполнению стека. Стек –специальная область памяти

в котором хранится значение переменных для которых

автоматически выделяется память .

2. Понятие файла структура текстового и бинарного файла

Понятие Файла

В языке С ++ файл рассматривается как последовательность

считываемых или записываемых данных .

Файл –любое устройство передающее данные или работающее с файлами .

В языке С++ есть 2 вида файла :текстовые , двоичные (бинарные).

Текстовые файлы – хранят информацию виде последовательности

символов . вывод осуществляется аналогично выводу на экран .

Редактируется в любом текстовом редакторе . В текстовом режиме

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

преобразуется в пару - возврат каретки , переход на новую строку.

Бинарные - предназначены для хранения только двоичных данных.

Структура файла .

BOF (Begin fo File)

EOF(End of File)

В начале файла записывается инф. О файле : имя файла ,

тип файла длина и т.д. , а в конце файла помещается

признак конца файла.

Дисковый файл –это файл записанный на диске.

3. Функции для открытия закрытия файлов.

FILE* fopen(const char* имя файла, const char* режим открытия)

Функция открывает файл, связывает его с соответственным

потоком и возвращает указатель на открытый файл.

Имя файла – указывает на строку символов, в которой

указывается режим открытия файла.

Режим открытия - указывает на строку символов,

в которой указывается режим открытия файлов.

Допустимые режимы открытия файла.

r - Открывает текстовый файл чтения; w - Создает текстовыЙ

файл для записи. Если файл с указанным именем существует,

прежняя информация уничтожается; q – Добавить информацию

в конец текстового файла; rb – Открыть двоичный файл для чтения;

wb – Создать двоичный файл для записи;

ab – Добавить информацию в конец двоичного

файла; r+ - Открыть текстовый файл для чтения\записи; w+ -

Создать текстовый файл для чтения\записи; a+ -

Добавить в конец текстового файла или создание

текстового файла для чтения\записи; r+b(rb+) –

Открыть двоичный файл для чтения\записи; w+b(wb+) –

Создать двоичный файл для чтения\записи; a+b(ab+) –

Добавит в конец двоичного файла или создать двоичный

файл для чтения\записи;

Если при открытии файла возникла ошибка, то функция

fopen возвращает NULL. Для создания файла можно

использовать FILE *fl; fl – fopen(“lab2.dat”, ''w'') Грамотнее:

FILE *fl; If ((fl=fopen(''lab2.dat'',''w''))==NULL)

{ cout<<’’Ошибка при создании’’<<endl;

return 1; }

Для исключения ошибки, возникающей при открытии

несущего файла можно использовать конструкцию:

FILE *fl; If ((fl=fopen(‘’lab2.dat’’,’’r’’))==NULL))

{ fl=fopen(‘’lab2.dat’’,’’w’’); }

int fclose(FILE *указатель на файл); Функция закрывает поток, открытый

fopen, и записывает в файл все данныйе, которые находятся в дисковом

буфере. После этого доступ к файлу будет запрещен.

int fcloseall(void); Закрывает все открытые файлы.

4.Функции для модификации содержимого файла(puts, gets, feof, fputs)

int putc(int символ, FILE *указатель на файл); Записывается один символ

в текущую позицию открытого файла. Символ определяется как тип int.

int gets(FILE *указатель на файл); Читает один символ из текущей

позиции указанного файла и после чтения указатель двигается на о

дну позицию вперед.

int feof(FILE *указатель на файл); Возвращает отличное от нуля

значение (true), если конец файла не достигнут, и ноль (false),

если достигнут конец файла

Пример:

{ if ((fl=fopen(‘’lab2.dat’’,’’r’’))==NULL)

{cout<<’’Ошибка при открытии’’<<endl;

exit(1); while(!feof(fl))cout<<getc(fl)<<fl<<’’ ‘’;

fclose(fl); }

int fputs(const char *строка, FILE *указатель на файл); Записывает

строку символов в текущую позицию указанного файла.

сhar *fgets(char *строка, int lkbyf, FILE *указатель на файл); Читает

строку символов, начиная с текущей позиции указанного файла до

тех пор пока не будет прочитан символ перехода на новую строку,

либо количество прочитанных символов не станет равным длина – 1.

int *fprintf(FILE *указатель на файл, const char *управляющая строка);

int *fscanf(FILE *указатель на файл, const char *управляющая строка);

void rewind(FILE *указатель на файл); - устанавливает указатель

текущей позиции в начало файла.

Int terror(FILE *указатель на файл); - определяет

произошла ли ошибка при работе с файлом.

Size_t fwrite(const void *записываемое данное, size_t размер

элемента, size_t число элементов, FILE *указатель на файл); -

Записывает в файл заданное число данных, заданного размера.

Size_t – определяет целое без знака. Ф-ия возвращает число

записанных элементов;

int fileno(FILE *указатель на файл); - Возвращает знак

дескриптора указ. файла(логический №файла)

long filelength(int дескриптор) – возвращает длину файла

с соответственным дескриптором.

int chsize(int дескриптор, long размер); - Устанавливается

новый размер файла с соответственным дескриптором.

int fseek(FILE *указатель на файл, long int число байт, int точка отсчета); -

Устанавливает указатель в заданную позицию

5.Функции для модификации содержимого файла(ferror, fwrite, fread)

int ferror(FILE * указатель на файл); определ. Произошла ли ошибка при работе с файлом

size_t fwrite( const void* записываемое данное, size_t размер элемента, size_t число

элементов, FILE* указатель на файл), запис. в файл зад. число дан. зад. размера.

Size_t – определяет целое без знака. Ф-ция возращ. число записанных элементов.

Int fileno( File* указатель на файл); - возвр. знач. дескриптера указ. файла(логич. № файла)

Long file length (int дескриптор) – возвр. длину файла с соответ. дескриптором

Int chsize( int дескриптор, long размер) ; - устанавливается новый размер файла с

оответ. дескриптором

Int fseek( FILE* указатель на файл, long int числа байт, int точка отсчёта) ; -

устанавливает указ. в задан. позицию.

6. Сортировка массивов. Методы сартировки.

Поиск и сортиравка ведётся по ключу. Ключом счит. то поле сируктуры,

по кот. ведется сортировка и поиск.

Основное треб. к ключу состоит в том, чтобы операция проверки была

короткой, поэтому, например, не следует в кач. ключа выбирать действ.

числа, поиск может быть безрезультативным.

Цель сортировки – облегчить послед. поиск элементов.

Сортировку массивов наз. внутр. сортировкой, о сортировку файлов внешней.

Существует 3 основных метода сортировки:

Обмен (при этом методе меняется местами элементы, располож. не по

порядку. Обмен продолж. до тех пор, пока все элементы не будут упорядочены).

2. Выбор (В начале ищется наименьший элемент и ставиться в первую

позицию, затем ищется след. по значимости элем. и устанавл. на

2-е место и т.д. В рез. все элементы устанавливаются в необход.

позицию.

3. Вставка(Послед. перебир. все элементы и каждый элемент помещ.

в ту позицию, где он должен стоять)

Если в одсортир. массиве элемент с одинак. ключами располагаются

в том же порядке, в котором они располагались в исх. массиве,

то такой алгоритм сортировки наз. устойчивым иначе неустойчивым.

Критерий эффективности сортировки:

  1. Средняя скорость сортировки (Определяется числом

  2. сравнений и обменом).

  3. Скорость работы в наилучшем и наихудшем случаях

  4. (Имеет знач., если такие случаи встреч. часто.

  5. Сущ. такие алгоритм, кот. имеют выс. средн.. скор.,

  6. однако медленно работают в наихудшем случае).

3. Естественность сортировки

(Сортировка наз. естественной, если время сортировки мин. и увелич.

по мере возр. степени неупорядоч массива.

4. Алгоритм работы с эл., имеющими одинаковое значение.

7.Сортировка массивов. Простые методы сортировки.

1. Обмен (при этом методе меняется местами элементы, располож. не

по порядку. Обмен продолж. до тех пор, пока все элементы

не будут упорядочены). По всем критериям пузырёк плох.

2. Выбор (В начале ищется наименьший элемент и ставиться в

первую позицию, затем ищется след. по значимости элем. и

устанавл. на 2-е место и т.д. В рез. все элементы устанавливаются

в необход. позицию.

3. Вставка(Послед. перебир. все элементы и каждый элемент

помещ. в ту позицию, где он должен стоять) Достоинства:

Естественная и устойчивая сортировка

Если в одсортир. массиве элемент с одинак. ключами располагаются

в том же порядке, в котором они располагались в исх. массиве,

то такой алгоритм сортировки наз. устойчивым иначе неустойчивым.

Метод пузырька: void s_puz(int a[], int n)

{ int i,j,t; for(i=1; i < n; i++)

for( j=n-1; j >= i; j--) if(a[j-1] > a[j])

{ t = a[j-1]; a[j-1] = a[j]; a[j] = t; }}

8.Метод Шелла .Сортировка Массивов

Метод Шелла основан на сортировке вставками. Сначало

сортируются элементы отстоящ. друг от друга на 3 позиции,

затем эл-ты отстоящ. друг от друга на 2 позиции и обязательно,

посл. на это сортировка эл-ов отстоющ. друг от друга на 1 позицию.

Кол-во сдвигов в данной сортировке существенно снижена по

сравнению с прост методом сортир. существ. зависит от послед.выбр.

шагов. Послед. шагов программист выбирает исходя из конкретн. условиях.

Пример:

void s_shell(int a[], int n)

{ int i, j, t; for(int d=3; d>0; d--)

for(i=d; i<n; i++) { t = a[i];

for(j=i-d; j>=0 && t<a[j]; j-=d) a[j+d]=a[j];

a[j+d] = t; }}

9. Сортировка слиянием. Алгоритм, достоинства и недостатки

Предполагается, что внутри массива из n-элементов имеется 2

смежных отсортированных участка и рекурсивный алгоритм

основан на следующей последовательности подзадач:

- Тривиальная задача: Массив из одного элемента отсортирован

- Элементарная задача: Слияние двух отсортированных участков

в один отсортированный

- Рекурсивное соотношение: Массив разбивается на 2 смежных

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

Алгоритм: массив разделен до последовательности длины один ?

слияние до упорядоченных пар? слияние до упорядоченных четверок?

слияние в один массив.

Один из эффективных методов выполнения, поэтому как правило

используется при организации алгоритмов внешней сортировки.

10.Сортировка Хоара или Quicksort

В основе лежит пузырьковая сортировка. Сначала выбирается

базовый элемент ( средний или выбранный случайным образом )

После выбора все элементы большие или равные базовому

перемещаются вправо, а меньшие – влево. Затем аналогичные

действия повторяются до отдельно для каждой части до тех пор,

пока массив не будет отсортирован.

Работает метод следующим образом: В качествек базового элемента

выбирается средний элемент, массив просматривается слева на право

до тех пор пока не будет найден элемент больший или равный базовому.

После этого массив просматривается справа на лево дое тех пор,

пока не будет найден элемент меньший либо равный базовому.

Найденные элементы меняются местами. После этого массив

разбивается на 2 части, большая часть помещается в стэк,

а меньшая сортируется дальше. Когда размер сортируемого

участка уменьшается до одного элемента, из стэка извлекается

неотсортированный участок. Процесс сортироки продолжается

до тех пор, пока не будут отсортированы все участки.

В большинстве случаев эта сортировка дает наилучший результат,

но данный метод не любит массивов, имеющих много одинаковых

массивов, а также больших отсортированных участков.

Не следует использовать при сортировке небольших массивов, т.к.

данный метод имеет сложный алгоритм , что снижает его эффективность.

11. Выбор метода сортировки. Поиск в массиве

1. В большинстве случаев быстр. сортировка даёт наилучший результат.

Однако данный метод не любит массивов, имеющ. много одинаковых

элементов и больших отсортированных участков.

2. Если сортируемый список частично упорядочен, то лучше

использовать метод Шелла.

3. Для внешних корректировок хорошо подходит корректировка слияния.

4. При сортировке небольших массивов (до 1000эл.) можно использовать

прямые методы, т.к. сложный алгоритм имеет длинный код,

что несколько уменьшает их эффективность.

Поиск в массиве структур: Задача поиска эл. в массиве структур

заключается в нахождении такого индекса, который удолетворяет

условию mas [i]. X= key.

Линейный поиск ( использ. Когда нет никакой доп. Информации

о нахождении искомого элемента) – представляет собой послед.

Перебор элемента массива до обнаружения элемента,

либо до конца, если элемент не найден.

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

отсортированы по заданному ключу)

12.Понятие списка, стека и очереди уже есть в вопросе 13.

Понятие рекурсивного типа данных

Подобно рекурсивной ф-ии вызыв. Саму себя рекурсивный тип

данных при своем списании допускает обращение к самому с

ебе struct tinf { char fio [50]; Char adr [70]; Int otc; };

Struct tstk { tinf s; Tstk*a; }spis; Struct tstr {int inf; Tstr*a; }sp;

При размещении элементов списка в каждой адресной ячейке

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

знать указатель на 1-ый элемент списка. Доступ к основным элементам

осуществ. Путем последоват. Перехода от предыдущей ячейки к

последующей. Адрес последней ячейки=0. Используемый способ адресации

называется косвенным. В отличии от адресации по индексу(массива)

косвенная адресация менее наглядна, однако обладает большей плоскостью

и например позволяют сортировать списки не перемещая элементы в памяти.

13. Понятие списка, стека и очереди. Особенности работы со стеками.

Список-это последовательность однотипных данных работа с которыми

ведётся в оперативной памяти. В процессе работы список может

изменять свой размер. Наибольшее распространение получили 2 формы

работы со списком это очередь и стек.

Стек-это список с одной точкой входа. Данные добавляются в стек и

извлекаются из него только с одной стороны, тем самым реализуется

принцип первым вошел, последним вышел.

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

конец очереди и извлекаются из начала очереди. Реализуется принцип

первым вошёл, первым вышел.

Добавление элемента в стек :

tstk *AddStask(tstk *sp, int inf)

{ tstk *spt=new tstk;

spt->inf = inf;

spt->a = sp; return spt; }

Чтение элемента с удалением

tstk *ReadStackD(tstk *sp, int &inf)

{ if (sp == NULL) return NULL;

tstk *spt = sp;

inf= sp->inf;

sp = sp->a;

delete spt;

return sp;

14.Понятие списка, стека и очереди см. вопр.

13. Особенности работы с однонаправленной очередью.

Добавление элемента в очередь

void AddOch(toch **sp,toch **spk, int inf)

{ toch *spt=new toch;

spt->inf = inf;

spt->a = NULL;

if (*spk == NULL) // Если нет элементов

*sp=*spk=spt;

Else

{ (*spk)->a = spt;

*spk = spt; }

return; }

Чтение элемента с удалением

toch *ReadOchD(toch *sp, int &inf)

{ if (sp == NULL) return NULL;

inf= sp->inf;

toch *spt = sp;

sp = sp->a;

delete spt;

return sp; }

15. Двунаправл. очереди. Объявление. Особенности работы

Очередь в которой у каждого элемента есть указатели на впереди и

позади стоящий элементы называется двунаправленной. Следует отметить,

что начало и конец двусвязанного списка логически эквивалентен.

Так как в таком списке можно передвигаться от элемента к элементу

двумя разными путями, то в конце каждого из них в поле

соответствующего указателя находится признак пустого указателя 0.

Наличие двух указателей в каждом элементе заметно усложняет

список и приводит к доп. затратам в памяти, но в то же время

обеспечивает более эффективное выполнение операций над списками.

Объявление типа: struct tochd { int inf; tochd *left; tochd *rigth; } *sp;

Создание очереди:void NewOchd(tochd **sl, tochd **sr)

{ *sl=new tochd; *sr=new tochd; (*sl)->left = NULL;

(*sl)->rigth = *sr; (*sr)->left = *sl; (*sr)->rigth = NULL; return; }

Подключение: tochd *sl, *sr; NewOchd(&sl,&sr);

Добавление элемента после(перед) заданного: void AddOchdRigth(tochd *sp, int inf)

{ tochd *spt=new tochd; spt->inf = inf; spt->left = sp(sp->left); pt->rigth = sp->rigth(sp);

sp(spt)->rigth = spt(sp); spt->rigth(left)->left(right) = spt;

(sp->left = spt;) return; }

Чтение и удаление элемента с адресом sp: int ReadOchdD(tochd *sp) { int inf= sp->inf;

sp->left->rigth = sp->rigth; sp->rigth->left = sp->left; delete sp; return inf; }

16. Циклические списки

Циклические списки позволяет осуществить перемещение по списку

в любом направлении.

Объявление:

Struct toch { int int,

Tochd*leff;

Tochd*right; }

*sp;

Создание очереди:

Void new ochd(tochd**sf,tochd**sr)

{ *sr=new tochd;

*sr=new tochd;

(*sl)-> left=nuul;

(*sl)-> right = *sr;

(*sr)-> left = *sl;

(*sr)-> right = nuul;

Return;}

подключение:

toch *sl,*sr; new ochd

Удаление всей очереди:

Void del ochd all(tochd**sl,toch**sr)

{ Tochd *spt =(*sl)->right;

While (spt! = *sr)

{ cout <<read ochd D(spt) <<endl;

Snt =(*sl)-> right; }

Delete *sl,

*sl=null Spt -> right -> leff = spt;}

20.Двоичное дерево поиска.Создание дерева

Поиск максима. мин. зн.ел.

Поиск в дереве максимального (минимального) значения.

Производится полный обход дерева, в каждой вершине

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

в вершине и значений, полученных от потомков при рекурсивном

вызове функции.

Поиск элемента с максимальным ключем: int poiskmaxtree(ttree *p)

{ while (p->rigth != NULL) p = p->rigth; return p->inf; }

Поиск элемента с минимальным ключем: int poiskmintree(ttree *p)

{ while (p->left != NULL) p = p-> left; return p->inf; }

Остальные функции смотри вопрос 18.

18. Двоичное дерево поиска

Двоичным дерево поиска – дерево у которого ключи расположены

т.о. , что для любого узла значение левого потомка меньше,

а правого больше. Такая организация дерева позволяет осуществлять

поиск данных с эффективностью аналогичной эффективности

двоичного либо бинарного поиска..

Сбалансированное дерево – это дерево, у которого узлы, имеющие

только одну ночь, располагаются не ниже 2-ух последних уровней.

Объявление: struct ttree { int inf; ttree *left; ttree *rigth; } *proot;

Добавление нового элемента:ttree *addtree(ttree *proot, int inf)

{ ttree *nl, *pr, *ps; bool b; nl = new ttree; nl->inf = inf; nl->left = NULL;

nl->rigth = NULL; if (proot == NULL) return nl; ps = proot; while (ps != NULL) { pr=ps;

b = (inf < ps->inf); if (b) ps = ps->left; else ps = ps->rigth; }

if (b) pr->left = nl; else pr->rigth = nl; return proot; }

Удаление всего дерева: ttree *deltree(ttree *p)

{ if (p==NULL) return NULL;

deltree(p->left); deltree(p->rigth); delete(p); p = NULL; return NULL; }

19. Дв.дерево поиска. Симметричный, прямой и обратный обход дерева.

Смотри вопрос 18.

Обходом дерева называется последовательное обращение по всем его узлам.

Обход дерева:

Void obh(three*p) // обход всего дерева

{if (p=NULL) return; // вывод при прямом обходе

Obh (p-> a1) Obh(p->a2)

Obh three (p->an); // вывод при обратном обходе }

Симметричный обход дерева:

Void wrtree (tree*p)

{ if (p==NULL) return;

Wrtree (p-> left);

Cout <<p-> inf <<” ”;

Wrtree ( p-> right) ; }

21.Алгоритм преобразования выражения из инфиксной

формы в форму обратной польской записи (а+в)*(с+d)/f

а+в – инфиксная форма

+ав – префиксная форма

ав+ - постфиксная форма

постфиксная форма записи получила название обратной польской записи

рассмотренное выше выражение можно представить в форме :

S=ab+cd+*+f/

Алгоритм преобразования выражения из инфиксной формы в

форму обратной польской записи: Приоритет 0 1 2 3

Операции )( + - * / ^ Строка просмотра слева на права,

операнды перепис. в вых. Строку, а знаки операции заносятся из стека

след. образом:

1)Если стек пуст, то операция записыв. в стек.

2)Открывающиеся скобка записывается в стек.

3)Закрыв. скобка выталк. выходную строку, все операции из стека до

ближ. открывающейся скобки, сами скобки уничтожаются

4)Если стек не пуст, то очередная операция выталкивает выходную строку

из стека все операции имеющие приоритет, а сама операция

записывается в стек в стек. Если после выборки последнего символа в

стеке остались операции, то все они выталкиваются в выходную строку.

5) Если после выборки последнего символа в стеке остаются операции,

то все они выбыли в выходн.

22. Понятие хеширования. Схемы хеширования

Хэширование-способ организации базы данных для того, чтобы

насождение элемента занимала наименишее время. Для ключа.,

который записан в особую хэш-таблицу, затем при помощи некой

простой функции,алгоритмы хэширования определяется положением

искомого элемента в таблице по значению его ключа. Существует

недостаток - большой размер массива.

Для организации работы необходимо использовать 2 алгоритма:

1.Алгоритм размещения, который помещает элементы с заданным

key в найденную свободную ячейку хэш-таблицы

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

позицию по ключу и, если ключ не совпадает, то последующий поиск

осуществляется в соответствии с выбранным алгоритмом

разрешенного конфликта.

23. Хеш-таблица на основе перемешанной таблицы

Используется элемент хэширования i=key%M. Используется

следующий алгоритм хэширования: Если позиция i занята,

то ищется первая сводная позиция и помещается туда элемент.

Достоинства:

- простой алгоритм вставки\поиска элементов

Недостатки:

- невозможность изменить хэш-таблицы

-сложный алгоритм удаления элемента

-если данные в хэш-таблице расположены неравномерно,

то скорость поиска может быть очень низкой

(Для преодаления данного недостатка можно использовать

фун-ию вида i=(key+M)%10, где М простое число, которое может,

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

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

в одинаковое начальное положение.

24. Хеш-таблица на основе связанных списков

В данном методе элемент, имеющий ключ, попадает в

одну и ту же позицию, размещ. в связных списках. i= key%10

Достоинства:

-достаточно простой алгоритм вставки поиска элемента

-связная таблица не может быть переполнена.

Недостатки:

-если данные в таблице расположены неравномерно,

то стеки могут быть достаточно большими, что снизит скорость

поиска (Для преодоления этого недостатка можно использовать

функцию вида i=(key+M)%10).

17. Древовидные структуры данных

Все данные называются узлами: Узел “a” – корень.

Узлы, из которых не выходят связи – листы (f,g,r,i) Узлы,

находящиеся непоср. ниже – дочерние. Все узлы, наход.

выше\ниже след.- предки\потомки. Узлы с одним родителем –

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

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

бинарным. Глубина узла – число предков +1 .Глубина дерева –

наибольшая глубина всех узлов.

Для реализации древовидных структур используют следующее:

struct ttree { tinf inf; ttree *a1; ttree *a2; …. ttree *an; } *proot *p;

Размещение в памяти данной структуры:

proot=new ‘ttree;

proot→int=’a’;

proot→a2=NULL;

p=proot;

p→a1=new +tree;

p=p→a1;

p→int=’b’;

p→a2=NULL;p→a3=NULL; p→a1=new ttree; p=p→a1; p→int=’d’; И так далее…

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