Загрузка данных
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();
}
}