Загрузка данных


using System;
using System.Collections;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // Настройка кодировки для корректного вывода кириллицы в консоли
        Console.OutputEncoding = System.Text.Encoding.UTF8;

        // =====================================================================
        // РАЗДЕЛ 1: HASHTABLE (ХЭШ-ТАБЛИЦА)
        // =====================================================================
        Console.WriteLine("=== РАЗДЕЛ: HASHTABLE ===");

        // Задача 1: Создание и вывод Hashtable
        Hashtable table = new Hashtable();
        table.Add("ID_01", "Иван Иванов");
        table.Add("ID_02", "Пётр Петров");
        table.Add("ID_03", "Анна Сидорова");

        Console.WriteLine("Задача 1. Элементы Hashtable:");
        foreach (DictionaryEntry entry in table)
        {
            Console.WriteLine($"Ключ: {entry.Key}, Значение: {entry.Value}");
        }

        // Задача 2: Поиск значения по ключу
        Console.WriteLine("\nЗадача 2. Поиск значения по ключу:");
        string searchKey = "ID_02";
        if (table.ContainsKey(searchKey))
        {
            Console.WriteLine($"Найден элемент: {searchKey} -> {table[searchKey]}");
        }
        else
        {
            Console.WriteLine($"Ключ '{searchKey}' не найден.");
        }

        // Задача 3: Удаление элемента
        Console.WriteLine("\nЗадача 3. Удаление элемента:");
        table.Remove("ID_03"); // Удаляем элемент с ключом "ID_03"
        Console.WriteLine("Оставшиеся элементы после удаления:");
        foreach (DictionaryEntry entry in table)
        {
            Console.WriteLine($"{entry.Key}: {entry.Value}");
        }

        // Задача 4: Подсчет элементов
        Console.WriteLine($"\nЗадача 4. Количество элементов в таблице: {table.Count}");

        // Задача 5: Объединение двух Hashtable
        Console.WriteLine("\nЗадача 5. Объединение двух Hashtable:");
        Hashtable extraTable = new Hashtable() { { "ID_04", "Ольга Николаева" }, { "ID_05", "Дмитрий Волков" } };
        Hashtable combinedTable = new Hashtable();

        foreach (DictionaryEntry entry in table) combinedTable[entry.Key] = entry.Value;
        foreach (DictionaryEntry entry in extraTable) combinedTable[entry.Key] = entry.Value;

        foreach (DictionaryEntry entry in combinedTable)
        {
            Console.WriteLine($"{entry.Key} => {entry.Value}");
        }

        // Задача 6: Получение всех ключей и значений
        Console.WriteLine("\nЗадача 6. Все ключи отдельно:");
        foreach (var key in combinedTable.Keys) Console.WriteLine($"- Ключ: {key}");
        
        Console.WriteLine("Все значения отдельно:");
        foreach (var val in combinedTable.Values) Console.WriteLine($"- Значение: {val}");

        // Задача 7: Изменение значения по ключу
        Console.WriteLine("\nЗадача 7. Изменение значения по ключу 'ID_01':");
        combinedTable["ID_01"] = "Иван Измененный";
        foreach (var val in combinedTable.Values)
        {
            Console.WriteLine(val);
        }


        // =====================================================================
        // РАЗДЕЛ 2: STACK (СТЕК)
        // =====================================================================
        Console.WriteLine("\n\n=== РАЗДЕЛ: STACK ===");

        // Задача 1: Создание и добавление элементов в Stack
        Stack<string> stack = new Stack<string>();
        stack.Push("Первый элемент");
        stack.Push("Второй элемент");
        stack.Push("Третий элемент");

        Console.WriteLine("Задача 1. Элементы стека (сверху вниз):");
        foreach (var item in stack)
        {
            Console.WriteLine(item);
        }

        // Задача 2: Извлечение элемента из Stack
        Console.WriteLine("\nЗадача 2. Извлечение верхнего элемента:");
        string poppedItem = stack.Pop();
        Console.WriteLine($"Извлечен элемент: {poppedItem}");

        // Задача 3: Получение верхнего элемента без извлечения
        Console.WriteLine("\nЗадача 3. Получение верхнего элемента без извлечения (Peek):");
        if (stack.Count > 0)
        {
            string topItem = stack.Peek();
            Console.WriteLine($"Верхний элемент: {topItem}. Количество в стеке: {stack.Count}");
        }

        // Задача 4: Проверка, пуст ли стек
        Console.WriteLine("\nЗадача 4. Проверка на пустоту:");
        if (stack.Count == 0) Console.WriteLine("Стек пуст.");
        else Console.WriteLine($"Стек не пуст. Количество элементов: {stack.Count}");

        // Задача 5: Переворот строки
        Console.WriteLine("\nЗадача 5. Переворот строки с использованием стека:");
        string originalString = "Привет";
        Stack<char> charStack = new Stack<char>();
        foreach (char c in originalString) charStack.Push(c);
        
        string reversedString = "";
        while (charStack.Count > 0) reversedString += charStack.Pop();
        Console.WriteLine($"Оригинал: {originalString} -> Перевернутая: {reversedString}");

        // Задача 6: Подсчет и проверка скобок
        Console.WriteLine("\nЗадача 6. Проверка правильности скобок в строке:");
        string expression = "(a + b) * (c - d)";
        Stack<char> brackets = new Stack<char>();
        bool bracketsValid = true;

        foreach (char c in expression)
        {
            if (c == '(') brackets.Push(c);
            else if (c == ')')
            {
                if (brackets.Count == 0) { bracketsValid = false; break; }
                brackets.Pop();
            }
        }
        if (brackets.Count > 0) bracketsValid = false;
        Console.WriteLine($"Строка '{expression}': " + (bracketsValid ? "Скобки верны" : "Ошибка в скобках"));

        // Задача 7: Удаление элементов из стека до определенного значения
        Console.WriteLine("\nЗадача 7. Удаление из стека до маркерного значения:");
        Stack<string> textStack = new Stack<string>();
        textStack.Push("Корень");
        textStack.Push("МАРКЕР");
        textStack.Push("Мусор 1");
        textStack.Push("Мусор 2");

        while (textStack.Count > 0)
        {
            string current = textStack.Pop();
            Console.WriteLine($"Удален: {current}");
            if (current == "МАРКЕР") break;
        }


        // =====================================================================
        // РАЗДЕЛ 3: QUEUE (ОЧЕРЕДЬ)
        // =====================================================================
        Console.WriteLine("\n\n=== РАЗДЕЛ: QUEUE ===");

        // Задача 1: Создание и добавление элементов в Queue
        Queue<string> queue = new Queue<string>();
        queue.Enqueue("Первый в очереди");
        queue.Enqueue("Второй в очереди");
        queue.Enqueue("Третий в очереди");

        Console.WriteLine("Задача 1. Элементы очереди:");
        foreach (var item in queue)
        {
            Console.WriteLine(item);
        }

        // Задача 2: Извлечение элемента из Queue
        Console.WriteLine("\nЗадача 2. Извлечение первого элемента (Dequeue):");
        string dequeuedItem = queue.Dequeue();
        Console.WriteLine($"Извлечен элемент: {dequeuedItem}");

        // Задача 3: Получение первого элемента без извлечения
        Console.WriteLine("\nЗадача 3. Получение первого элемента без извлечения (Peek):");
        if (queue.Count > 0)
        {
            string firstInQueue = queue.Peek();
            Console.WriteLine($"Первый элемент в очереди: {firstInQueue}. Всего элементов: {queue.Count}");
        }

        // Задача 4: Проверка, пуста ли очередь
        Console.WriteLine("\nЗадача 4. Проверка на пустоту:");
        if (queue.Count == 0) Console.WriteLine("Очередь пуста.");
        else Console.WriteLine($"Очередь содержит элементы. Количество: {queue.Count}");

        // Задача 5: Симуляция обслуживания клиентов
        Console.WriteLine("\nЗадача 5. Симуляция обслуживания клиентов:");
        Queue<string> customerQueue = new Queue<string>();
        customerQueue.Enqueue("Клиент 1");
        customerQueue.Enqueue("Клиент 2");
        customerQueue.Enqueue("Клиент 3");

        while (customerQueue.Count > 0)
        {
            string servedCustomer = customerQueue.Dequeue();
            Console.WriteLine($"Обслужен: {servedCustomer}");
        }

        // Задача 6: Обратная очередь (Разворот)
        Console.WriteLine("\nЗадача 6. Разворот очереди:");
        Queue<int> numbersQueue = new Queue<int>();
        numbersQueue.Enqueue(1);
        numbersQueue.Enqueue(2);
        numbersQueue.Enqueue(3);

        Stack<int> tempStack = new Stack<int>();
        while (numbersQueue.Count > 0) tempStack.Push(numbersQueue.Dequeue());
        while (tempStack.Count > 0) numbersQueue.Enqueue(tempStack.Pop());

        Console.WriteLine("Содержимое развернутой очереди:");
        foreach (var num in numbersQueue)
        {
            Console.WriteLine(num);
        }

        Console.WriteLine("\n=== Все задачи успешно выполнены ===");
        Console.ReadKey();
    }
}