|
|||||||
Дерево, композиция
Время создания: 13.06.2020 19:41
Раздел: C++ - Примеры кода - Работа на уроке
Запись: Shut913/Tetra-notes-Programming/master/base/15920665050uxl8azpbt/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
примечание - ошибка в delete key не копируется #include <iostream> using namespace std; // //typedef unsigned int uint; // //template<class T> //struct TreeItem //{ // T item; // int key; // TreeItem* parent; // TreeItem* left; // TreeItem* right; //}; // //template<class T> //class Tree //{ //private: // TreeItem<T>* root; // uint count; //public: // Tree(); // ~Tree() { Clear(); } // // void Clear(); // // uint GetCount(); // bool IsEmpty(); // // void Insert(const T& item, uint key); // void Delete(TreeItem<T>* node); // // TreeItem<T>* GetRoot() const { return root; } // // void Print(TreeItem<T>* node); // // TreeItem<T>* Search(TreeItem<T>* node, uint key); // TreeItem<T>* GetMax(TreeItem<T>* node); // TreeItem<T>* GetMin(TreeItem<T>* node); // TreeItem<T>* GetPrev(TreeItem<T>* node); // TreeItem<T>* GetNext(TreeItem<T>* node); //}; // //template <class T> //Tree<T>::Tree() //{ // root = nullptr; // count = 0; //} // //template <class T> //void Tree<T>::Clear() //{ // Delete(root); //} // //template <class T> //void Tree<T>::Insert(const T& item, uint key) //{ // TreeItem<T>* x = new TreeItem<T>; // x->item = item; // x->key = key; // x->left = 0; // x->right = 0; // // TreeItem<T>* y = 0, * node = root; // // while (node != 0) // { // y = node; // if (x->key < node->key) // node = node->left; // else // node = node->right; // } // // x->parent = y; // // if (y == 0) // root = x; // else if (x->key < y->key) // y->left = x; // else // y->right = x; // // count++; //} // //template<class T> //uint Tree<T>::GetCount() { return count; } // //template<class T> //bool Tree<T>::IsEmpty() { return count == 0; } // //template <class T> //void Tree<T>::Delete(TreeItem<T>* node) //{ // if (node) // { // TreeItem<T>* x, * y; // // if (node->left == 0 || node->right == 0) // y = node; // else // y = GetNext(node); // // if (y->left) // x = y->left; // else // x = y->right; // // if (x) // x->parent = y->parent; // // if (!y->parent) // root = x; // else if (y == y->parent->left) // y->parent->left = x; // else // y->parent->right = x; // // if (y != node) // node->item = y->item; // // delete y; // // count--; // } //} // //template <class T> //TreeItem<T>* Tree<T>::GetNext(TreeItem<T>* node) //{ // TreeItem<T>* y = 0; // if (node != 0) // { // if (node->right != 0) // return GetMin(node->right); // // y = node->parent; // while (y != 0 && node == y->right) // { // node = y; // y = y->parent; // } // } // return y; //} // //template <class T> //void Tree<T>::Print(TreeItem<T>* node) //{ // if (node) // { // Print(node->left); // cout << node->key << " : " << node->item << endl; // Print(node->right); // } //} // //template <class T> //TreeItem<T>* Tree<T>::Search(TreeItem<T>* node, uint key) //{ // while (node != 0 && key != node->key) // { // if (key < node->key) // node = node->left; // else // node = node->right; // } // return node; //} // //template <class T> //TreeItem<T>* Tree<T>::GetMin(TreeItem<T>* node) //{ // if (node != 0) // while (node->left != 0) // node = node->left; // return node; //} // //template <class T> //TreeItem<T>* Tree<T>::GetMax(TreeItem<T>* node) //{ // if (node != 0) // while (node->right != 0) // node = node->right; // return node; //} // //template <class T> //TreeItem<T>* Tree<T>::GetPrev(TreeItem<T>* node) //{ // TreeItem<T>* y = 0; // if (node != 0) // { // if (node->left != 0) // return GetMax(node->left); // // y = node->parent; // while (y != 0 && node == y->left) // { // node = y; // y = y->parent; // } // } // return y; //} // //void main() //{ // Tree<int> tree; // tree.Insert(3456, 4); // tree.Insert(876, 12); // tree.Insert(34, 3); // tree.Insert(876, 8); // tree.Insert(234, 10); // // tree.Print(tree.GetRoot()); // // tree.Delete(tree.Search(tree.GetRoot(), 8)); // // cout << "\n\n"; // tree.Print(tree.GetRoot()); //} /////// // -- вложенный тип // == композиция // 1. Элемент является частью объекта // 2. Элемент может принадлежать только 1 объекту за 1 раз // 3. Элемент управляется объектом // 4. Элемент не знает о существовании объекта class Point { private: int _x; int _y; public: Point() : _x{}, _y{} {} Point(int x, int y) : _x{x}, _y{y} {} void set(int x, int y) { _x = x; _y = y; } void print() { std::cout << _x << " " << _y; } }; class Unit { private: int _age; Point _p; public: Unit(const int& age, const Point& p) : _age{ age }, _p{ p } {} }; |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|