ANSI C 3

ANSI C 3



6 STRUKTURY

Żaden węzeł nie może mieć więcej niż dwóch potomków; może natomiast mieć jednego lub nie mieć żadnego.

Węzły w drzewie są uporządkowane tak, aby dla każdego węzła jego lewe poddrze-wo zawierało słowa leksykograficznie mniejsze od słowa w tym węźle, a prawe pod-drzewo - słowa większe. Prezentujemy drzewo binarne zdania „Nadszedł czas, aby wszyscy dobrzy ludzie przyszli z pomocą swojej partii’" tak, jak je budowano wstawiając po kolei każde napotkane słowo.

Nadszedł

/\ /\ aby dobrzy    przyszli z

\ /\

ludzie pomocą swojej

/

partii

Aby sprawdzić, czy nowo wczytane słowo znajduje się już w drzewie, porównujemy je ze słowem zapisanym w korzeniu drzewa. Jeżeli jest tym właśnie słowem, to mamy odpowiedź twierdzącą. Jeżeli nowe słowo jest mniejsze od słowa zawartego w węźle, to poszukiwanie kontynuujemy od lewego potomka; w przeciwnym przypadku badamy prawego potomka. Jeśli nie ma potomka po właściwej stronie znaczy to, że nowe słowo nie występuje w drzewie i że brakujący potomek jest właściwym miejscem dla tego słowa. Proces ten jest rekurencyjnie zstępujący (dziedziczny), gdyż poszukiwanie rozpoczęte w dowolnym węźle korzysta z poszukiwania rozpoczynającego się od jednego z jego potomków. Wobec tego zastosowanie rekurencyjnych procedur wstawiających i wypisujących słowa będzie najbardziej naturalne.

Wracając do opisu węzła, jego odpowiednią reprezentacją jest struktura o czterech składowych;    -V

struct tnode {    /* węzeł drzewa */

char *word;    /* wskaźnik do tekstu słowa */    ~~~

int count;    /* licznik wystąpień */

struct tnode *left; /* lewy potomek */ struct tnode *right; /* prawy potomek */

Taka rekurencyjna deklaracja węzła może wygląda ryzykownie, lecz jest zupełnie po* prawna. Nie dopuszcza się, aby struktura zawierała w sobie swoje własne wcielenie, ak

6.5 STRUKTURY ODWOŁUJĄCE SIĘ DO SAMYCH SIEBIE struct tnode *left;

deklaruje left jako wskaźnik do struktury tnode, a nie jako samą strukturę.

Nieraz bywa potrzebna inna odmiana struktur odwołujących się do siebie samych: dwie struktury, które odwołują się do siebie nawzajem. Osiągnąć to można w następujący sposób:

struct t {

• • •

struct s *p; /* p wskazuje na strukturę s */

K

struct s {

• • •

struct t *q■' I* q wskazuje na strukturę t */

};

Cały program jest zaskakująco mały dzięki garści wcześniej napisanych funkcji, na przykład getword. Funkcja main czyta kolejne słowa za pomocą getword i umieszcza je w drzewie za pomocą funkcji addtree.

#include <stdio.h>

#include <ctype.h>

#include <string.h>

#define MAXWORD 100

struct tnode *addtree(struct tnode *, char *);

void treeprint(struct tnode *);

int getword(char *, int);

I* zliczanie wystąpień słów */ main()

{

struct tnode +root; /* wskaźnik do korzenia drzewa */ char word[MAXWORD];

root = NULL;

while (getword(word, MAXWORD) != EOF) if (isalpha(wordK)]))

root = addtree(root, word); treeprint(root); return 0;

}

189


Wyszukiwarka

Podobne podstrony:
Struktura programu - uwagi Program może być zapisany w jednym lub wielu plikach źródłowych
§32 1.    Student, który nie zaliczył nie więcej niż dwóch przedmiotów z danego roku
Foto3 warunkowy zadania 36137 nie będą nigdy wykonana zadania 23 może zostać pominięta w zalażnofd
jednostki, natomiast zbiór nie może mieć 3/5 elementów lub też nic nie oznacza sformułowanie „3/5 z
"ŻADEN S7n7FŚIIWV A NIE MOŻE BYĆDOPÓKI NIE IGNACY JAN PADEREWSK
UCZELNIA W PARZE Z BIZNESEM Żaden uniwersytet nie może dobrze funkcjonować w XXI wieku, jeżeli nie b
38. Obrońca - kiedy musi go mieć oskarżony Alt. 77. Oskarżony może mieć jednocześnie nie więcej niż
Zn ZAKAZ KOMPROMISÓW Żaden sługa nie może dwom panom służyć. Gdyż albo jednego będzie nienawidził,
II    Sterowanie wewnętrzne, struktury poznawcze: Żaden człowiek nie jest układem
np. art. 77 k.p.k. Oskarżony może mieć nie więcej niż 3 obrońców. Przepisy dzielimy na: S przepisy i
Zadanie. Czy prawdziwe jest stwierdzenie, że w kluczu żaden atrybut nie może być funkcyjnie zależny
przeciw siebie dwa intelekty w sytuacji tak złożonej, że żaden z nich nie może jej objąć w pełn
ANSI C 3 4 FUNKCJE I STRUKTURA PROGRAMU rozwagą, ponieważ mogą niekorzystnie wpływać na strukturę
ANSI C 3 4 FUNKCJE I STRUKTURA PROGRAMU zostanie rozwinięte w wiersz printf(Mx/yM ” = %g

ANSI C 0 i 6 STRUKTURY Prawie wszystko, co wiąże się z polami bitowymi, zależy od implementacji. T
38 ◄ Żaden krem nie może zagwarantować określonego odcienia barwa opalenizny zależy od te
3 b-i Antropologia strukturalna niezrozumiała, gdybyśmy nie zarysowali pobieżnie jej źródeł i nie

więcej podobnych podstron