struct (Элементарный вопрос!!)

Модератор: Модераторы разделов

Аватара пользователя
kkkggg
Сообщения: 100

struct

Сообщение kkkggg »

struct Tnode
{
string word;
int count;
Tnode* left; // Что это такое?
Tnode * right; // Что это такое?
};

Раскажите, что это такое и для чего это можно использовать, если можно элементарный пример.
Мне не понятны строки Tnode* left;.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: struct

Сообщение elide »

хм... очень похоже на указатели на два елемента. один левее текущего, а второй - правее текущего.
можно из такой штуки, например, двусвязный список замутить.
слава роботам!
Спасибо сказали:
Аватара пользователя
dip56245
Сообщения: 14

Re: struct

Сообщение dip56245 »

такая структура используется для Динамических Списков, судя из названия узла (ноды).

У первого элемента left будет nil или null не помню точно как в С, right на следующий элемент... соответственно у последнего left ссылается на предыдущий элемент, а right на nil....
В string & count будут хранится какие-то данные... имхо так.
Just for Fun © Linus Torvalds
Мы изучили ваше коммерческое предложение по разработке информационной системы и приняли решение приобрести некоторое количество той травы, которую вы курите
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: struct

Сообщение aLexx programmer »

TNode - узел двоичного дерева.
left и right - указатели на левое и правое поддеревья.

dip56245
(dip56245 @ May 17 2006, в 09:30) писал(а):такая структура используется для Динамических Списков

В таких случаях используются указатели next и prev.
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: struct

Сообщение Asgard »

можно только посоветовать набрать в гугле 'с бинарные деревья', а также вкурить материал по структурам данных.
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: struct

Сообщение Zeus »

Для дерева неплохо было бы ещё иметь указатель на родителя.
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: struct

Сообщение aLexx programmer »

(Zeus @ May 17 2006, в 18:09) писал(а):Для дерева неплохо было бы ещё иметь указатель на родителя.

Вовсе необязательно. Смотря, для чего нужно дерево.
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: struct

Сообщение v04bvs »

kkkggg писал(а):
17.05.2006 01:52
struct Tnode
{
string word;
int count;
Tnode* left; // Что это такое?
Tnode * right; // Что это такое?
};

Раскажите, что это такое и для чего это можно использовать, если можно элементарный пример.
Мне не понятны строки Tnode* left;.

Скорее всего это действительно упорядоченное бинарное дерево, в поле word хранится слово, в поле count хранится то, сколько раз оно встречалось.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: struct

Сообщение Zeus »

aLexx programmer писал(а):
17.05.2006 18:22
(Zeus @ May 17 2006, в 18:09) писал(а):
Для дерева неплохо было бы ещё иметь указатель на родителя.

Вовсе необязательно. Смотря, для чего нужно дерево.

Я ж не говорю, что обязательно, но неплохо бы.
Спасибо сказали:
Flagman
Сообщения: 9

Re: struct

Сообщение Flagman »

Zeus писал(а):
18.05.2006 10:26
aLexx programmer писал(а):
17.05.2006 18:22

(Zeus @ May 17 2006, в 18:09) писал(а):
Для дерева неплохо было бы ещё иметь указатель на родителя.

Вовсе необязательно. Смотря, для чего нужно дерево.

Я ж не говорю, что обязательно, но неплохо бы.


elide же написал - что это двусвязный список и он прав на 100% :). В gtk можно посмотреть Doubly-Linked Lists (g_list_*) и применений у него куча.
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: struct

Сообщение Asgard »

elide же написал - что это двусвязный список и он прав на 100%

под эту структуру подходят как двусвязный список, так и бинарное дерево. причём в данном коде это скорее всего бинароное дерево, т.к. структура имеет говорящие название Tnode eq 'Tree node'
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Flagman
Сообщения: 9

Re: struct

Сообщение Flagman »

Asgard писал(а):
18.05.2006 15:47
elide же написал - что это двусвязный список и он прав на 100%

под эту структуру подходят как двусвязный список, так и бинарное дерево. причём в данном коде это скорее всего бинароное дерево, т.к. структура имеет говорящие название Tnode eq 'Tree node'


У деревьев есть еще родитель(и) и дети :) так что никак они сюда не подходят :) либо допишите еще пару указателей на них. Но и двусвязные списки это частный случай деревьев.
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: struct

Сообщение Asgard »

Flagman
мдя.

Код: Выделить всё

struct Tnode
{
string word;
int count;
Tnode* left; // указатель на левое дочернее поддерево(потомок)
Tnode * right; // указатель на правое дочернее поддерево(потомок)
};

/* ... */

Tnode* btree, parrent_btree;

/* ... */
parent_btree = btree; // родительский узел
btree = btree->left->right->left;
printf("%s\n", btree->word);
btree = parent_tree;
/* ... */


чем вам не бинарное дерево?
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: struct

Сообщение aLexx programmer »

(Flagman @ May 18 2006, в 15:58) писал(а):У деревьев есть еще родитель(и) и дети

У деревьев в общем случае нет родителей и детей. Они есть у узлов.
(Flagman @ May 18 2006, в 15:58) писал(а):так что никак они сюда не подходят

Чушь. Есть много задач и алгоритмов, где указатель на родителя не требуется. Пример - добавление/удаление/поиск по бинарному дереву (без перестройки самого дерева, конечно).
(Flagman @ May 18 2006, в 15:58) писал(а):либо допишите еще пару указателей на них.

Вот Вы и допишИте. А мы не будем B)
Спасибо сказали: