예제 #1
0
        public static OList AddEndLIST(int l) // Добавление в конец списка
        {
            OList beg = new OList();

            beg.data = new Worker();    // Первый элемент фундамент
            OList end = beg;            // Переменная end нужна, чтобы ссылка пременной beg не стёрлась из памяти

            for (int i = 1; i < l; i++) //сколько элементов вставить
            {
                OList Node = new OList();
                if (i % 2 == 0)
                {
                    Node.data = new MyClassLibrary10.Worker();
                }
                else if (i % 3 == 0)
                {
                    Node.data = new MyClassLibrary10.Engneer();
                }
                else
                {
                    Node.data = new MyClassLibrary10.Employee();
                }

                end.next = Node;
                end      = Node;
            }
            beg.count = l;//сколько объектов в списке
            return(beg);
        }
예제 #2
0
        public static OList Add(OList list, int n, MyClassLibrary10.Employee G) // Добавление элемента на позицию n
        {
            if (list == null)
            {
                Console.WriteLine("Список пустой");
                return(null);
            }
            else
            {
                if (list.count < n)
                {
                    Console.WriteLine("Выход за пределы списка");
                    return(null);
                }
                else
                {
                    if (n == 1)
                    {
                        OList LinksAfterN = list;
                        list = new OList {
                            data = G, next = LinksAfterN
                        };
                        list.count += 1;
                        return(list);
                        //OList ListTmp = list;
                        //ListTmp.data = G;
                    }
                    else if (n == list.count)
                    {
                        OList ListTmp = list;
                        for (int i = 1; i < n; i++)
                        {
                            ListTmp = ListTmp.next;
                        }
                        ListTmp.next = new OList {
                            data = G, next = null
                        };
                        return(list = ListTmp);
                    }
                    else
                    {
                        OList ListTmp     = list; // Для запоминания n-го элемента
                        OList LinksAfterN = list; // Для запоминания связей после n-го элемента

                        for (int i = 0; i < n - 1; i++)
                        {
                            ListTmp     = ListTmp.next; // Присваиваем ссылку на следующий элемент
                            LinksAfterN = ListTmp.next; // Присваиваем ссылку на элемент, который нужно запомнить
                        }

                        ListTmp.next = new OList {
                            data = G, next = LinksAfterN
                        };
                        list.count += 1;
                        return(list = ListTmp);
                    }
                }
            }
        }
예제 #3
0
 public static void ShowList(OList list) // Вывод списка
 {
     if (list == null)                   // Проверка на заполненность 1-го узла
     {
         Console.WriteLine("Список пустой");
     }
     else
     {
         OList tmp = list;
         while (tmp != null) // Проверка на заполненность узла
         {
             tmp.data.PrintInfo();
             tmp = tmp.next; // Переход на следующий узел в листе
         }
     }
 }
예제 #4
0
        public static OList AddBeginningLIST(int l) // Добовление в начало однонаправленного списка
        {
            OList beg = new OList();                //начало списка

            beg.data = MakeNew();                   //созднание нового элемента
            for (int i = 1; i < l; i++)
            {
                //Console.WriteLine(beg.data.ToString());//это мне для проверки
                MyClassLibrary10.Employee tmp = new MyClassLibrary10.Employee(); // Данные для OList
                OList element = new OList();                                     // Новый узел
                element.data = tmp;                                              // Заполняем data нового узла
                element.next = beg;                                              // ссылаемся на предыдущий узел
                beg          = element;                                          // Присваиваем предыдущему узлу ссылку на текущий
            }
            beg.count = l;
            return(beg);
        }
예제 #5
0
        public static OList Delete2(OList list) // удаление каждого второго объекта
        {
            if (list != null && list.next != null)
            {
                OList tmp  = list;
                int   size = list.count;
                for (int i = 1; i < size && tmp != null; i = i + 2)
                {
                    //if (i%2==1)
                    //{
                    if (tmp.next.next == null)
                    {
                        tmp.next = null;
                    }
                    else
                    {
                        tmp.next    = tmp.next.next;
                        list.count -= 1;
                    }
                    //}
                    tmp = tmp.next;

                    //tmp = tmp.next;
                }
                return(list);
            }
            else
            {
                if (list.next == null)
                {
                    Console.WriteLine("Остался один элемент в списке");
                    return(null);
                }
                else
                {
                    Console.WriteLine("Список пустой");
                    return(null);
                }
            }
        }
예제 #6
0
 public OList()
 {
     data  = null;
     next  = null;
     count = 0;
 }
예제 #7
0
        //static void Show(MyCollection<string> My)
        //{
        //    foreach (string str in My)
        //        Console.WriteLine(str);

        //}
        static void Main(string[] args)
        {
            OList               olist      = null;
            biList              bilist     = null;
            TreeNode            root       = null;
            TreeNode            searchRoot = null;
            int                 choice     = 0;
            MyCollection <Item> collection = null;

            do
            {
                MainMenu();
                Input(out choice, 1, 3);
                switch (choice)
                {
                case 1:    // 1 Часть
                {
                    do
                    {
                        SecondMenu();
                        Input(out choice, 1, 4);
                        switch (choice)
                        {
                        case 1:             // Односвязный
                        {
                            do
                            {
                                MenuOList();
                                Input(out choice, 1, 5);
                                switch (choice)
                                {
                                case 1:                     // Create and output
                                {
                                    int l = 0;
                                    olist = new OList();
                                    Console.WriteLine("Введите количество элементов в списке");
                                    olist = OList.AddEndLIST(Natural(out l));
                                    OList.ShowList(olist);
                                }
                                break;

                                case 2:                     // task
                                {
                                    if (olist == null)
                                    {
                                        Console.WriteLine("Односвязный список не создан");
                                    }
                                    else
                                    {
                                        olist = OList.Delete2(olist);
                                        OList.ShowList(olist);
                                    }
                                }
                                break;

                                case 3:                     // Del
                                {
                                    if (olist == null)
                                    {
                                        Console.WriteLine("Односвязный список не создан");
                                    }
                                    else
                                    {
                                        olist = null;
                                        Console.WriteLine("Однонаправленный список удалён");
                                    }
                                }
                                break;

                                case 4:
                                {
                                    OList.ShowList(olist);
                                }
                                break;
                                }
                            } while (choice != 5);
                            choice = 0;
                        }
                        break;

                        case 2:             // Двусвязный
                        {
                            do
                            {
                                MenubiList();
                                Input(out choice, 1, 4);
                                switch (choice)
                                {
                                case 1:                     // Create and output
                                {
                                    int l = 0;
                                    Console.WriteLine("Введите количество элементов в двусвязном списке");
                                    bilist = new biList();
                                    bilist.Create(Natural(out l));
                                    biList.WriteList(bilist);
                                }
                                break;

                                case 2:                     // task
                                {
                                    if (bilist == null)
                                    {
                                        Console.WriteLine("Двунаправлленный список не создан");
                                    }
                                    else
                                    {
                                        Console.WriteLine("Введите номер вставляемого элемента");
                                        int number = 0;
                                        bilist.AddNode(Natural(out number));
                                        biList.WriteList(bilist);
                                    }
                                }
                                break;

                                case 3:                     // Del
                                {
                                    if (bilist == null)
                                    {
                                        Console.WriteLine("Двунаправлленный список не создан");
                                    }
                                    else
                                    {
                                        bilist = null;
                                        Console.WriteLine("Двунаправленный список удалён");
                                    }
                                }
                                break;

                                case 4:
                                {
                                    OList.ShowList(olist);
                                }
                                break;
                                }
                            } while (choice != 5);
                            choice = 0;
                        }
                        break;

                        case 3:             // Дерево
                        {
                            do
                            {
                                MenuTree();
                                choice = Input(out choice, 1, 5);
                                switch (choice)
                                {
                                case 1:
                                {
                                    int l = 0;
                                    root = new TreeNode();
                                    Console.WriteLine("Введите размер дерева");
                                    root = TreeNode.IdealTree(Natural(out l), root);
                                    TreeNode.ShowTree(root, 3);
                                }
                                break;

                                case 2:
                                {
                                    if (root == null)
                                    {
                                        Console.WriteLine("Дерево не создано");
                                    }
                                    else
                                    {
                                        Console.WriteLine($"Минимальный элемент {TreeNode.SearchMin(root)}");
                                    }
                                }
                                break;

                                case 3:
                                {
                                    if (root == null)
                                    {
                                        Console.WriteLine("Идеально сбалансированное дерево еще не создано. Создание дерева поиска невозможно.");
                                    }
                                    else
                                    {
                                        searchRoot = TreeNode.CreateSearchTree(searchRoot, root);
                                        TreeNode.ShowTree(searchRoot, 3);
                                    }
                                }
                                break;

                                case 4:
                                {
                                    if (root == null)
                                    {
                                        Console.WriteLine("Дерево не создано");
                                    }
                                    else
                                    {
                                        root = null;
                                        Console.WriteLine("Дерево удалено");
                                    }
                                }
                                break;
                                }
                            } while (choice != 5);
                        }
                        break;
                        }
                    } while (choice != 4);
                    break;
                }

                case 2:     // 2 Часть
                    do
                    {
                        MyCollectionMenu();
                        switch (Input(out choice, 1, 10))
                        {
                        case 1:         // Creat
                        {
                            collection = new MyCollection <Item>();
                            Console.WriteLine("Хеш-таблица словаря создана");
                        }
                        break;

                        case 2:         // Insert
                        {
                            Console.WriteLine("1. Добавить рандомные элементы(несколько) 2. Добавить определенный элемент(1)");
                            switch (Input(out choice, 1, 9))
                            {
                            case 1:                 //InsertRandom
                            {
                                if (collection == null)
                                {
                                    Console.WriteLine("Хеш-таблица не создана ");
                                }
                                else
                                {
                                    Console.WriteLine("Введите количество вставляемых элементов");
                                    collection.InsertRandom(int.Parse(Console.ReadLine()));
                                    Console.WriteLine("Элемент добавлен");
                                }
                            }
                            break;

                            case 2:
                            {
                                if (collection == null)
                                {
                                    Console.WriteLine("Хеш-таблица не создана ");
                                }
                                else
                                {
                                    Console.WriteLine("Введите значение");
                                    Console.WriteLine("Введите имя");
                                    string name = Console.ReadLine();
                                    Console.WriteLine("Введите возраст");
                                    int age = int.Parse(Console.ReadLine());
                                    Console.WriteLine("Введите стаж");
                                    int exp = int.Parse(Console.ReadLine());

                                    Employee one = new Employee(name, age, exp);
                                    collection.Insert(one);
                                    Console.WriteLine("Элемент добавлен");
                                }
                            }
                            break;
                            }
                        }
                        break;

                        case 3:         // Remove
                        {
                            if (collection == null)
                            {
                                Console.WriteLine("Хеш-таблица не создана");
                            }
                            else
                            {
                                Console.WriteLine("Введите количество удаляемых элементов");
                                collection.Delete(int.Parse(Console.ReadLine()));
                            }
                        }
                        break;

                        case 4:         // Search
                        {
                            if (collection == null)
                            {
                                Console.WriteLine("Хеш-таблица не создана ");
                            }
                            else
                            {
                                Employee emp     = new Employee("Пестова Александра", 19, 1);
                                Item     newItem = new Item(emp);

                                if (collection.Search(newItem))
                                {
                                    Console.WriteLine("Элемент найден");
                                }
                                else
                                {
                                    Console.WriteLine("Элемент не найден");
                                }
                            }
                        }
                        break;

                        case 5:         // ref clone
                        {
                            if (collection == null)
                            {
                                Console.WriteLine("Хеш-таблица не создана ");
                            }
                            else
                            {
                                MyCollection <Item> CloneCollection = collection;
                                Console.WriteLine("Коллекция поверхностно скопирована");
                                Console.WriteLine("Добавим в клон коллекции элемент \"Меня добавили\". Он также появится и в клонируемой коллекции");
                                Employee one = new Employee("Меня добавили", 1, 1);
                                CloneCollection.Insert(one);
                                MyCollection <Item> .ShowHashTable(CloneCollection, "Клон");

                                MyCollection <Item> .ShowHashTable(collection, "Основа");
                            }
                        }
                        break;

                        case 6:         // full clone
                        {
                            if (collection == null)
                            {
                                Console.WriteLine("Очередь на базе однонаправленного списка не создана ");
                            }
                            else
                            {
                                MyCollection <Item> Clone = new MyCollection <Item>();
                                Clone.AllCopy(collection.items, ref Clone.items);
                                Console.WriteLine("Коллекция плностью скопирована");
                                Console.WriteLine("Добавим в клон коллекции элемент \"Меня добавили\". Он не появится и в клонируемой коллекции");
                                Employee one = new Employee("Меня добавили", 1, 1);
                                Clone.Insert(one);
                                MyCollection <Item> .ShowHashTable(Clone, "Клон");

                                MyCollection <Item> .ShowHashTable(collection, "Основа");
                            }
                        }
                        break;

                        case 7:         // del
                        {
                            if (collection == null)
                            {
                                Console.WriteLine("хеш-таблица не создана ");
                            }
                            else
                            {
                                collection.Clear();
                                Console.WriteLine("Коллекция удалена");
                            }
                        }
                        break;

                        case 8:         //write
                        {
                            MyCollection <Item> .ShowHashTable(collection, "Хеш-таблица");
                        }
                        break;
                        }
                    } while (choice != 9);
                    break;
                }
            } while (choice != 3);
        }