Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 20:09   #1
amfisat
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 13
По умолчанию Деревья

Всем привет! Я ОЧЕНЬ новичок в проге, но я упорно занимаюсь ...

Вот, собссна, мое затруднение ... - на парах мы как-то очень быстро пробежали материал, и, не успев закрепить предыдущий, полезли уже в бинарные деревья ... - пытаюсь теперь осваивать самостоятельно...
И вот такая задача:

Надо написать программу, которая содержит динамическую информацию налоговой инспеции. Сведения о каждом лице включают в себя: имя, список налогов, для каждого налога - его размер, признак, юридическое лицо или нет.
Программа должна обеспечивать:1) Формирование базы данных инспекции в виде бинарного дерева. 2) при уплате всех налогов (сумма и имя вводятся с консоли) лицо удаляется из базы. 3) По запросу выводятся сведения о физ. и юрид. лицах отдельно.

У меня есть шаблон, который хотелось бы подогнать под эту задачку:

Код:
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <iostream>
using namespace std;
struct list
{
char* name;
int count;
list* next;
};
struct btree
{
int sort;
list* data;
btree* left;
btree* right;
};
list *addToList(list* l, char* str, int count)
{
if (l == NULL)
{
l = new list();
l->name = new char[strlen(str) + 1];
strcpy(l->name, str);
l->count = count;
l->next = NULL;
return l;
}
else if (strcmp(l->name, str) == 0)
{
l->count += count;
return l;
}
else
{
l->next = addToList(l->next, str, count);
return l;
}
}
list *deleteInList(list* l, char* str, int count)
{
if (l == NULL)
{
return NULL;
}
else if (strcmp(l->name, str) == 0)
{
l->count -= count;
if (l->count == 0)
{
list* temp = l->next;
delete [] l->name;
delete l;
return temp;
}
return l;
}
else
{
l->next = deleteInList(l->next, str, count);
return l;
}
}
void printList(list* l)
{
if (l == NULL)
return;
cout<<l->name<<l->count;
printList(l->next);
}
btree* add(btree *tree, int sort, char* str, int count)
{
if (tree == NULL)
{
btree* tree = new btree();
tree->data = NULL;
tree->left = NULL;
tree->right = NULL;
tree->sort = sort;
tree->data = addToList(tree->data, str, count);
return tree;
}
else if (tree->sort == sort)
{
tree->data = addToList(tree->data, str, count);
return tree;
}
else if (tree->sort > sort)
{
tree->left = add(tree->left, sort, str, count);
}
else if (tree->sort < sort)
{
tree->right = add(tree->right, sort, str, count);
}
return tree;
}
btree* find(btree *tree, int sort)
{
if (tree == NULL)
{
return NULL;
}
if (tree->sort == sort)
{
printList(tree->data);
return tree;
}
if (sort < tree->sort)
{
return find(tree->left, sort);
}
else if (sort > tree->sort)
{
return find(tree->right, sort);
}
}
btree* min(btree *tree)
{
if (tree->left == NULL)
{
return tree;
}
return min(tree->left);
}
btree* del(btree *tree, int sort, char* str, int count)
{
if (tree == NULL)
{
return NULL;
}
btree *temp;
if (tree->sort == sort)
{
tree->data = deleteInList(tree->data, str, count);
if (tree->data == NULL)
{
if (tree->left == NULL && tree->right == NULL)
{
delete tree;
return NULL;
}
else if (tree->left == NULL)
{
temp = tree->right;
delete tree;
return temp;
}
else if (tree->right == NULL)
{
temp = tree->left;
delete tree;
return temp; 
}
else 
{
temp = min(tree->right);
tree->sort = temp->sort;
tree->data = temp->data;
temp->data = NULL;
tree->right = del(tree->right, tree->sort, str, count);
return tree;
}
}
}
if (sort < tree->sort)
{
tree->left = del(tree->left, sort, str, count);
}
else if (sort > tree->sort)
{
tree->right = del(tree->right, sort, str, count);
} 
return tree;
}
void destroyList(list* l)
{
list* temp;
while (l != NULL)
{
temp = l;
l = l->next;
delete [] temp->name;
delete temp;
}
}
void destroyTree(btree* tree)
{
if (tree == NULL)
return;
btree* left = tree->left;
btree* right = tree->right;
destroyList(tree->data);
delete tree;
destroyTree(left);
destroyTree(right);
}
int main()
{
cout<<"Input element of tree or empty string to end : ";
btree* tree = NULL;
char str[100]; 
char sort[100];
char count[100];
while (strlen(gets(str)) > 0)
{
gets(sort);
gets(count);
tree = add(tree, atoi(sort), str, atoi(count));
cout<<"Input element of tree or empty string to end : ";
}
cout<<"\nInput element to delete or empty string to end : ";
while (strlen(gets(str)) > 0)
{
gets(sort);
gets(count);
tree = del(tree, atoi(sort), str, atoi(count));
cout<<"\nInput element to delete or empty string to end : ";
}
cout<<"\nInput sort to print or empty string to end : ";
while (strlen(gets(str)) > 0)
{
find(tree, atoi(str));
cout<<"\nInput sort to print or empty string to end : ";
}
destroyTree(tree);
return 0;
}
Посмотрите, пжлст ...
amfisat вне форума Ответить с цитированием
Старый 29.05.2010, 22:26   #2
[Ваш_ник]
Пользователь
 
Регистрация: 24.01.2010
Сообщений: 25
По умолчанию

Ты бы хоть комментарии написал...
[Ваш_ник] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Б - деревья Mclaren Помощь студентам 1 05.06.2010 13:40
(С) 2-3 деревья Lawliet32 Помощь студентам 0 05.01.2010 19:41
Деревья на С++ osichev Помощь студентам 0 11.12.2009 21:51
деревья в С++ osichev Помощь студентам 0 10.12.2009 19:48
Деревья Chudo4258 Помощь студентам 3 29.04.2009 14:46