Вход    Регистрация     Поиск Непрочитанное    Неотвеченное     Не осилю :(

Городские исследования

Путешествия, диггерство, руфинг, заброшенные места, городские исследования Минска и Беларуси



Новая тема Ответить  [ Сообщений: 43 ]  стр 1, 2, 3  След.
Автор Сообщение
СообщениеЧт июн 14, 2012 14:28    Профиль    

Сообщения: 1762
Карма: 74
Нид хелп, осталась одна лаба, доделать не успеваю, поэтому взял чужой код. Помогите плз разобраться что это за строки(выделены красным) и что они делают.
Лаба с деревом.
Язык C.

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>


typedef struct item
{
char data;
struct item *left;
struct item *right;
} Item;

void AddNode(char data, Item **node);
void ShowTree(Item *node, int level);
Item *SearchElement(Item *node, char value);
int GetLeafCount(Item* node);
Item *DestroyTree(Item *node);
Item *DeleteNode(Item *root, char val);
int Rightmost(Item *root);


void main(void)
{
Item *root = NULL;
printf("1. Enter string; 2. Show tree; 3. Nodes count; 4. Delete node\n");
char i, a, d, c[20];
int j;
Item *f = NULL;
do
{
i = getch();
switch(i)
{
case '1':
printf("Enter string: ");
scanf("%s",&c);
for (int i=0; i<strlen(c); i++)
AddNode(c[i], &root);
break;
case '2':
ShowTree(root, 0);
break;
case '3':
printf("Choose letter: ");
scanf("%s",&a);
f = SearchElement(root, a);
j = GetLeafCount(f);
printf("%d\n",j);
break;
case '4':
printf("Choose node: ");
scanf("%s",&d);
DeleteNode(root, d);
break;
}
} while (i!='9');

DestroyTree(root);
}

void AddNode(char data, Item **node)
{
if (*node == NULL)
{
*node = (Item*)calloc(1, sizeof(Item));
(*node)->data = data;
(*node)->left = (*node)->right = NULL;
}
else
{
if (data < (*node)->data)
AddNode(data, &(*node)->left);
else if (data > (*node)->data)
AddNode(data, &(*node)->right);
else
puts("There is such element in the tree\n");
}
}


void ShowTree(Item *node, int level)
{
printf("\n");
if (node)
{
ShowTree(node->right, level + 1);
for (int i = 0; i < level; i++)
printf(" ");
printf("%c \n", node->data);
ShowTree(node->left, level + 1);
}
}


Item *SearchElement(Item *node, char value)
{
if((node->data == value) || node == NULL)
return node;
else
if(value < node->data)
return SearchElement(node->left, value);
else
return SearchElement(node->right, value);
}


int GetLeafCount(Item* node)
{
if(node == NULL)
return 0;
if(node->left == NULL && node->right == NULL)
return 0;
else
return GetLeafCount(node->left) + GetLeafCount(node->right) +1;
}


Item *DestroyTree(Item *node)
{
if (node)
{
if (node->left != NULL)
node->left = DestroyTree(node->left);
if (node->right != NULL)
node->right = DestroyTree(node->right);
delete node;
}
return NULL;
}


Item *DeleteNode(Item *root, char val)
{

if (root == NULL)
return NULL;

if(root->data == val)
{

if(root->left == NULL && root->right == NULL)
{
free(root);
return NULL;
}

if(root->right == NULL && root->left != NULL)
{
Item *temp = root->left;
free(root);
return temp;
}

if(root->left == NULL && root->right != NULL)
{
Item *temp = root->right;
free(root);
return temp;
}

root->data = Rightmost(root->left);
root->left = DeleteNode(root->left, root->data);
return root;


}

if(val < root->data)
{
root->left = DeleteNode(root->left, val);
return root;
}

if(val > root->data)
{
root->right = DeleteNode(root->right, val);
return root;
}

return root;
}


int Rightmost(Item *root)
{
while(root->right!=NULL)
root=root->right;
return root->data;
}


СообщениеЧт июн 14, 2012 14:32    Профиль    
Bonbons-Candies

Сообщения: 9729
Карма: 211
Bampirizm писал(а):
Помогите плз разобраться что это за строки(выделены красным)

очень похоже на исходники C


СообщениеЧт июн 14, 2012 14:34    Профиль    
Подполковник Очевидность

Сообщения: 5686
Карма: 142
Очень похоже на вложенные множества.


СообщениеЧт июн 14, 2012 14:35    Профиль    

Сообщения: 1762
Карма: 74
kalfany, кэп) именно строки красным, за что отвечают и тп и тд


СообщениеЧт июн 14, 2012 14:38    Профиль    
Bonbons-Candies

Сообщения: 9729
Карма: 211
Bampirizm, я не большой знаток C, но очень похоже на изменение атрибутов объекта


СообщениеЧт июн 14, 2012 14:42    Профиль    
Bonbons-Candies

Сообщения: 9729
Карма: 211
Bampirizm писал(а):
return root;

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

Код:
typedef struct item {
    char data;
    struct item *left;
    struct item *right;
    }
Item;


и т.п.


СообщениеЧт июн 14, 2012 14:44    Профиль    
Аватара пользователя

Сообщения: 69
Карма: 3
...


Последний раз редактировалось kalfany Чт июн 14, 2012 14:45, всего редактировалось 1 раз.
оффтопик


СообщениеЧт июн 14, 2012 14:45    Профиль    
Bonbons-Candies

Сообщения: 9729
Карма: 211
roomromm, ты название темы читал?


СообщениеЧт июн 14, 2012 14:48    Профиль    
Аватара пользователя

Сообщения: 69
Карма: 3
Создавать отдельную тему как-то не очень.[offtopic]Ладно, допилю его сам[/offtopic]


СообщениеЧт июн 14, 2012 15:02    Профиль    
Аватара пользователя

Сообщения: 1163
Карма: 67
root писал(а):
Очень похоже на вложенные множества.

kalfany писал(а):
Bampirizm, я не большой знаток C, но очень похоже на изменение атрибутов объекта

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


СообщениеЧт июн 14, 2012 15:03    Профиль    

Сообщения: 1762
Карма: 74
kostitsek8, классное замечание)


СообщениеЧт июн 14, 2012 15:04    Профиль    
Bonbons-Candies

Сообщения: 9729
Карма: 211
kostitsek8 писал(а):
все тут такие дохуя программисты, а починить оффтопик уже неделю не могут
заебало уже,

нечего писать оффтопик
форум для тематических обсуждений


СообщениеЧт июн 14, 2012 15:09    Профиль    
Аватара пользователя

Сообщения: 1163
Карма: 67
kalfany писал(а):
нечего писать оффтопик форум для тематических обсуждений

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

хотя если кому то банально лень ...

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

ах да, и удалите тогда из всех уже написанных сообщений тег, что б он не мозолил глаза


СообщениеЧт июн 14, 2012 15:10    Профиль    
Bonbons-Candies

Сообщения: 9729
Карма: 211
kostitsek8 писал(а):
уберите кнопку

kostitsek8 писал(а):
удалите тогда из всех уже написанных сообщений тег


Костя, здесь тебе никто ничего не должен.
Такие задачи можно писать только людям, которые согласились на тебя работать.


СообщениеЧт июн 14, 2012 15:19    Профиль    
Аватара пользователя

Сообщения: 1163
Карма: 67
kalfany писал(а):
Костя, здесь тебе никто ничего не должен.

а ну да,
а я то, наивный считал что администрация ресурса должна делать все для удобства форума для пользователей

накопилось уже,
мало того что нет удобной загрузки фотографий,
так ещё и оффтопик сломали,

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


СообщениеЧт июн 14, 2012 17:43    Профиль    
Bonbons-Candies

Сообщения: 9729
Карма: 211
kostitsek8, это некоммерческий проект
им занимаемся только в свободное от основных задач время


СообщениеЧт июн 14, 2012 18:24    Профиль    
Аватара пользователя

Сообщения: 166
kostitsek8 писал(а):
все тут такие дохуя программисты, а починить оффтопик уже неделю не могут

стоп нытье


СообщениеЧт июн 14, 2012 18:25    Профиль    
Аватара пользователя

Сообщения: 1163
Карма: 67
УРАААААААААА
спасибо огромное


СообщениеЧт июн 14, 2012 18:43    Профиль    
Подполковник Очевидность

Сообщения: 5686
Карма: 142
После решения проблемы с оффтопиком вопрос про Nested Sets потерял актуальность


СообщениеЧт июн 14, 2012 20:24    Профиль    
2.71828183
Аватара пользователя

Сообщения: 996
Карма: 53
omg... пилите html, css и php = будет вам счастье...
всёравно будущее за браузерными приложениями :)


Показать сообщения за:  Поле сортировки  
Новая тема Ответить  [ Сообщений: 43 ]  стр 1, 2, 3  След.

Часовой пояс: UTC + 2 часа [ Летнее время ]


Кто здесь?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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