Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практики / ПР3 / СД_П3.odt
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
321.42 Кб
Скачать

Заключение

В ходе работы был создан простой динамический циклический список, который включает реализацию базовых операций — добавление, удаление, очистку и поиск элементов. Дополнительно реализованы функции для удаления четных и повторяющихся значений.

Приложение а

(обязательное)

Код

using System;

class Node

{

public int Value;

public Node Next;

public Node(int value)

{

Value = value;

Next = null;

}

}

class MyList

{

private Node head;

private Node tail;

public MyList()

{

head = null;

tail = null;

}

public bool Add(int element)

{

Node newNode = new Node(element);

if (head == null)

{

head = newNode;

tail = newNode;

tail.Next = head;

}

else

{

tail.Next = newNode;

tail = newNode;

tail.Next = head;

}

return true;

}

public bool RemoveItem(int element)

{

if (head == null)

{

return false;

}

Node current = head;

Node previous = null;

do

{

if (current.Value == element)

{

if (previous == null)

{

if (head == tail)

{

head = null;

tail = null;

}

else

{

head = head.Next;

tail.Next = head;

}

}

else

{

previous.Next = current.Next;

if (current == tail)

{

tail = previous;

}

}

return true;

}

previous = current;

current = current.Next;

} while (current != head);

return false;

}

public bool Clear()

{

if (head == null)

{

return false;

}

head = null;

tail = null;

return true;

}

public bool Search(int element)

{

if (head == null)

{

return false;

}

Node current = head;

do

{

if (current.Value == element)

{

return true;

}

current = current.Next;

} while (current != head);

return false;

}

public void RemoveEven()

{

if (head == null)

{

return;

}

Node current = head;

Node previous = null;

do

{

if (current.Value % 2 == 0)

{

if (current == head)

{

if (head == tail)

{

head = null;

tail = null;

}

else

{

head = head.Next;

tail.Next = head;

current = head;

}

}

else

{

previous.Next = current.Next;

if (current == tail)

{

tail = previous;

}

current = previous.Next;

}

}

else

{

previous = current;

current = current.Next;

}

} while (current != head);

}

public void RemoveDuplicates()

{

if (head == null)

{

return;

}

Node current = head;

do

{

Node runner = current;

while (runner.Next != head)

{

if (runner.Next.Value == current.Value)

{

if (runner.Next == tail)

{

tail = runner;

}

runner.Next = runner.Next.Next;

}

else

{

runner = runner.Next;

}

}

current = current.Next;

} while (current != head);

}

public void PrintList()

{

if (head == null)

{

Console.WriteLine("Список пуст.");

return;

}

Node current = head;

do

{

Console.Write(current.Value + " ");

current = current.Next;

} while (current != head);

Console.WriteLine();

}

}

class Program

{

static void Main(string[] args)

{

MyList list = new MyList();

bool keepRunning = true;

while (keepRunning)

{

Console.WriteLine("1. Добавить элемент");

Console.WriteLine("2. Удалить элемент");

Console.WriteLine("3. Очистить список");

Console.WriteLine("4. Поиск элемента");

Console.WriteLine("5. Удалить четные элементы");

Console.WriteLine("6. Удалить повторяющиеся элементы");

Console.WriteLine("7. Показать список");

Console.WriteLine("8. Выйти");

string choice = Console.ReadLine();

switch (choice)

{

case "1":

Console.Write("Введите элемент: ");

int addValue = int.Parse(Console.ReadLine());

list.Add(addValue);

break;

case "2":

Console.Write("Введите элемент для удаления: ");

int removeValue = int.Parse(Console.ReadLine());

bool removed = list.RemoveItem(removeValue);

Console.WriteLine(removed ? "Элемент удален." : "Элемент не найден.");

break;

case "3":

bool cleared = list.Clear();

Console.WriteLine(cleared ? "Список очищен." : "Список пуст.");

break;

case "4":

Console.Write("Введите элемент для поиска: ");

int searchValue = int.Parse(Console.ReadLine());

bool found = list.Search(searchValue);

Console.WriteLine(found ? "Элемент найден." : "Элемент не найден.");

break;

case "5":

list.RemoveEven();

Console.WriteLine("Четные элементы удалены.");

break;

case "6":

list.RemoveDuplicates();

Console.WriteLine("Повторяющиеся элементы удалены.");

break;

case "7":

list.PrintList();

break;

case "8":

keepRunning = false;

break;

default:

Console.WriteLine("Неверный выбор.");

break;

}

}

}

}

Томск 2024

Соседние файлы в папке ПР3