Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практики / ПР3 / СД_П3

.pdf
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
389.12 Кб
Скачать

Рисунок 8 — Вывод списка

Сделал блок-схему(рис.9) и написал текстовое описание:

Функция RemoveDuplicates удаляет дубликаты, используя два указателя: current и runner. Указатель current фиксируется на текущем узле, а runner проходит по всем последующим узлам. Если значение узла runner совпадает со значением узла current, то runner изменяет ссылку на следующий узел, тем самым пропуская дубликат. Если дубликат находится в конце списка, указатель tail обновляется, чтобы указывать на предыдущий узел runner. Этот процесс продолжается, пока все узлы не будут проверены.

Рисунок 9 - Блок-схема

Заключение

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

Приложение А (обязательное)

Код

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;

}

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