С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 02.04.2017
Сообщений: 273
1

Создание сложной динамической структуры

19.11.2017, 10:02. Показов 592. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо реализовать динамическую структуру данных – «Хранилище объектов». Это бинарное дерево, каждый элемент которого стек(в стеке структуры фигур). При этом в стеке должно быть не более 5 элеметов. Не работает добавление в контейнер. Что с ним не так? И как реализовать удаление фигур по площади, меньше заданной.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <memory>
#include <cstring>
#include "btree.h"
#include "stack.h"
#include "criteria.h"
 
 
 
template <class T>
class Container
{
public:
    void add(const std::shared_ptr<T>& item);
    void erase(const Criteria<T>& criteria);
    //void print() const;
 
    template <class K>
    friend std::ostream& operator << (std::ostream& os, const Container<K>& container);
 
private:
    Btree<Stack<T>> m_container;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
template <class T>
void Container<T>::add(const std::shared_ptr<T>& item)
{
    auto lastContIt = m_container.begin();
    
    if (lastContIt == m_container.end())
        m_container.bstInsert(std::make_shared<Stack<T>>());
    
    lastContIt = m_container.begin();
 
    while (lastContIt.getItem()->GetNext() != nullptr)
        ++lastContIt;
 
    if ((*lastContIt)->size() == 5)
    {
        m_container.bstInsert(std::make_shared<Stack<T>>());
        ++lastContIt;
    }
 
    (*lastContIt)->Push(item);
 
    for (unsigned int i = (*lastContIt)->size() - 1; i > 0; --i)
    {
        auto lastElemIt = (*lastContIt)->get(i);
        auto preLastElemIt = (*lastContIt)->get(i - 1);
 
        if (strcmp(preLastElemIt->getName(), lastElemIt->getName()) <= 0)
            break;
 
        preLastElemIt.getItem()->swap(*lastElemIt.getItem());
    }
}
 
 
 
template <class T>
void Container<T>::erase(const Criteria<T>& criteria)
{
    
}
 
template <class K>
std::ostream& operator << (std::ostream& os, const Container<K>& container)
{
    if (container.m_container.size() == 0)
    {
        os << "================" << std::endl;
        os << "Container is empty" << std::endl;
    }
    else
    {
        unsigned int containerCnt1 = 1;
        
        
        for (auto subCont : container.m_container)      
        {  
            unsigned int containerCnt2 = 1;
 
            os << "================" << std::endl;
            os << "Container #" << (containerCnt1++) << ":" << std::endl;
            
            for (auto subItem : *subCont)
            {   
                os << "================" << std::endl;
                os << "Item #" << (containerCnt2++) << ":" << std::endl;
                
                subItem->print();
 
                os << "Area: " << subItem->area() << std::endl;
            }
        }
    }
 
    return os;
}
Дерево стек и итератор.
Кликните здесь для просмотра всего текста

Дерево
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "iterator.h"
 
template <class T>
class Btree
{
public:
    Btree();
    
    void bstInsert(const std::shared_ptr<T>& figure);
    void bstRemove(const std::shared_ptr<T>& figure);
    void Insert(const std::shared_ptr<T>& figure);
    
    Iterator<BTreeItem<T>, T> begin() const;
    Iterator<BTreeItem<T>, T> end() const;
    unsigned int size() const;
 
    template <class B>
    friend std::ostream& operator << (std::ostream& os, const Btree<B>& Btree);
    template <class B>
    void print1(const Btree<B>& btree);
 
private:
    std::shared_ptr<BTreeItem<T>> m_root;
    unsigned int m_size;
};
Элемент дерева. Для обхода дерева есть еще один отдельный стек TStack
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
template <class T>
class BTreeItem
{
public:
    
    BTreeItem(const std::shared_ptr<T>& figure);
    template <class B>
    friend std::ostream& operator << (std::ostream& os, const BTreeItem<B>& obj);   
    bool operator == (const BTreeItem<T>& other) const;
 
    void setLeft(std::shared_ptr<BTreeItem<T>> left); 
    void setRight(std::shared_ptr<BTreeItem<T>> right);
    std::shared_ptr<BTreeItem<T>> getLeft();
    std::shared_ptr<BTreeItem<T>> getRight();
    std::shared_ptr<T> getItem() const; 
    
    std::shared_ptr<BTreeItem<T>> getNext();
 
shared_ptr<BTreeItem<T>> GetNext();
shared_ptr<BTreeItem<T>> GoFarLeft(shared_ptr<BTreeItem<T>> current);
 
private:
std::shared_ptr<T> m_figure;
std::shared_ptr<BTreeItem<T>> m_left;
std::shared_ptr<BTreeItem<T>> m_right;
static TStack<shared_ptr<BTreeItem<T>>> stackOfBTreeItem;
};
 
template <typename T> TStack<shared_ptr<BTreeItem<T>>> BTreeItem<T>::stackOfBTreeItem;/////
Основной стек
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
template <class T> class Stack
{
public:
    Stack();
    virtual ~Stack();
 
    void Push(const std::shared_ptr<T>& item);
    std::shared_ptr<T> Pop();
    
    unsigned int size() const;
 
    bool empty();
    Iterator<StackItem<T>, T> get(unsigned int index) const;
 
    Iterator<StackItem<T>, T> begin() const;
    Iterator<StackItem<T>, T> end() const;
 
    template <class K>
    friend std::ostream& operator << (std::ostream& os, const Stack<K>& stack);
 
private:
    std::shared_ptr<StackItem<T>> head;
    unsigned int m_size;
};
Элемент стека
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class T> class StackItem
{
public:
    StackItem(const std::shared_ptr<T>& item);
 
    std::shared_ptr<StackItem<T>> SetNext(std::shared_ptr<StackItem>& m_next);
 
    void swap(StackItem<T>& other);
    
    std::shared_ptr<StackItem<T>> getNext();
    std::shared_ptr<T> getItem() const;
 
private:
    std::shared_ptr<T> m_item;
    std::shared_ptr<StackItem<T>> m_next;
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2017, 10:02
Ответы с готовыми решениями:

Создание сложной структуры или класса
Народ я не специалист - поэтому писать желательно с коментарием Необходимо открыть файл и...

Создание динамической конструкции из элементов структуры (дерево)
здравствуйте. Задание такое: Написать программу для создания динамической конструкции из...

Создание динамической структуры для работы с таблицей
Добрый день, прошу помочь с заданием, написала программу для работы с таблицей, теперь задание...

Организация настроек сложной структуры/класса
Здравствуйте, форумчане!! Возник такой вопрос: что если класс, который я реализую имеет большое...

0
19.11.2017, 10:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2017, 10:02
Помогаю со студенческими работами здесь

разработать программу создания сложной структуры на примере
1. создать сложную структуру на примере школы 2. создать сложную структуру на примере завода 3....

Задача на обработку символьных данных сложной структуры
Помогите пожалуйста с задачей 3.10, а само задание вот, номер 15:

Удаление динамической структуры
Здраствуйте, вот кусок кода: #define max 32 typedef enum lightColor_t { RED, ...

Запись динамической структуры в файл.
Доброго времени суток! У меня такой вопрос: Есть динамическая структура типа: массив каждый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru