Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Структуры, ссылающиеся на себя; двоичные деревья

Rusa




. Предположим, что нам надо спр 14214h716o 072;виться с более общей задачей, состоящей в подсчете числа появлений всех слов в некотором файле ввода. Так как список слов заранее не известен, мы не можем их упорядочить удобным образом и использовать бинарный поиск. Мы даже не можем осуществлять последовательный просмотр при поступлении каждого слова, с тем, чтобы установить, не встречалось ли оно ранее; такая программа будет работать «вечно». (Более точно, ожидаемое время работы растет как квадрат числа вводимых слов). Как же нам организовать программу, чтобы спр 14214h716o 072;виться со списком произвольных слов?

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


now is the time for all good men to come to the aid of their party - по завершении процесса, в котором для каждого нового слова в него добавляется новый узел (рис. 7.1):



struct tnode

;

struct tnode left

left

getword alloc

getword tree

#define maxword 20

main() /* word freguency count */

tree main tree main

tree w p

struct tnode *tree(struct tnode *p, char *w)

else if ((cond = strcmp(w, p->word)) == 0)

p->count //Это слово уже встречалось

else if cond < 0) //Меньше корня левого поддерева

p->left = tree(p->left, w);

else //Больше корня правого поддерева

p->right tree p->right w



return(p);

}

talloc alloc strsave Эта часть программы выполняется только при добавлении нового узла к ребру дерева. Мы здесь опустили проверку на ошибки возвращаемых функций strsave talloc

treeprint treeprint

treeprint p

treeprint struct tnode p

}

Прежде чем расстаться с этим примером, уместно сделать небольшое отступление в связи с вопросом о распр 14214h716o 077;делении памяти. Ясно, что в программе желательно иметь только один распр 14214h716o 077;делитель памяти, даже если ему приходится размещать различные виды объектов. Но если мы хотим использовать один распр 14214h716o 077;делитель памяти для обработки запросов на выделение памяти для указателей на переменные типа char struct tnode



: как организовать описания, чтобы спр 14214h716o 072;виться с тем, что функция alloc

Вообще говоря, требования выравнивания легко выполнить за счет выделения некоторого лишнего пространства, просто обеспечив то, чтобы распр 14214h716o 077;делитель памяти всегда возвращал указатель, удовлетворяющий всем ограничениям выравнивания. Например, на PDP-11 достаточно, чтобы функция alloc alloc alloc из главы 6 не предусматривает никакого определенного выравнивания. В главе 8 мы продолжим обсуждение темы, связанной с динамическим распр 14214h716o 077;делением памяти.

alloc является мучительным для любого языка, который серьезно относится к проверке типов. Лучший способ в языке «C» - объявить, что alloc char перевода типов. Таким образом, если описать p

char p

struct tnode p

tnode talloc

struct tnode talloc

. Напишите программу, которая читает «C»-программу и печатает в алфавитном порядке каждую группу имен переменных, которые совпадают в первых семи символах, но отличаются где-то дальше. (Сделайте так, чтобы 7 было параметром).




Document Info


Accesari: 1010
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )