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

Практики(Вариант №7) / Практическая работа №3

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

Заключение

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

11

Приложение А

(обязательное) Сортировка расческой

using System; public class Node

{public int Value; public Node Prev; public Node Next; public Node(int value)

{Value = value; Prev = null; Next = null;

} }

public class MyList

{private Node head; private Node tail; private int size; public MyList()

{head = null; tail = null; size = 0;

}

 

 

 

public bool Add(int element)

{

Node newNode = new Node(element);

 

 

if (head == null)

 

{

head = newNode;

 

 

 

}

tail = newNode;

 

 

 

 

else

 

 

 

{

tail.Next = newNode;

 

 

 

 

newNode.Prev = tail;

 

}

tail = newNode;

 

 

 

 

size++;

 

}

return true;

 

 

 

public bool RemoveItem(int element)

{

if (head == null) return false;

 

 

Node current = head;

 

while (current != null)

 

{

if (current.Value == element)

 

 

 

 

{

if (current.Prev != null)

 

 

 

 

 

 

current.Prev.Next = current.Next;

 

 

 

elsehead = current.Next; // Удаляем первый элемент

 

 

 

if (current.Next != null)

 

 

 

current.Next.Prev = current.Prev;

12

elsetail = current.Prev; // Удаляем последний элемент
size--;
} return true; current = current.Next;

}

} return false; public bool Clear()

{head = null; tail = null; size = 0; return true;

}

 

public int Search(int element)

{

Node current = head;

 

 

int index = 0;

while (current != null)

{

if (current.Value == element)

 

 

return index;

 

 

current = current.Next;

 

}

index++;

 

 

 

 

 

}

return -1;

 

 

 

 

 

public void Sort()

{

if (head == null || head.Next == null) return;

 

 

bool swapped;

 

do

 

 

 

 

{

swapped = false;

 

 

 

 

Node current = head;

 

 

while (current.Next != null)

 

 

{

if (current.Value > current.Next.Value)

 

 

 

 

 

 

{

int temp = current.Value;

 

 

 

 

 

 

 

 

current.Value = current.Next.Value;

 

 

 

 

current.Next.Value = temp;

 

 

 

}

swapped = true;

 

 

 

 

 

 

}

current = current.Next;

 

}

 

 

 

 

 

 

}

while (swapped);

 

 

 

 

public static MyList MergeSortedMyLists(MyList list1, MyList list2)

{

MyList result = new MyList();

 

 

Node current1 = list1.head;

 

Node current2 = list2.head;

 

while (current1 != null && current2 != null)

 

{

if (current1.Value <= current2.Value)

 

 

 

 

{

result.Add(current1.Value);

 

 

 

 

 

}

current1 = current1.Next;

 

 

 

13

 

 

 

 

result.Add(current2.Value); current2 = current2.Next;

else

{

} }

while (current1 != null)

{result.Add(current1.Value); current1 = current1.Next;

}

 

while (current2 != null)

{

result.Add(current2.Value);

 

}

current2 = current2.Next;

 

 

}

return result;

 

 

 

 

public void Print()

 

{

Node current = head;

 

 

 

 

Console.Write("MyList: ");

 

 

while (current != null)

 

 

{

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

 

 

 

 

 

}

current = current.Next;

 

 

 

 

}

Console.WriteLine();

 

 

 

 

public int Size

 

{

get { return size; }

 

}

}

 

 

 

 

 

class Program

{static void Main()

{MyList list1 = new MyList(); MyList list2 = new MyList();

list1.Add(5);

list1.Add(2);

list1.Add(8);

list1.Add(1);

list2.Add(3);

list2.Add(6);

list2.Add(4);

list2.Add(7);

Console.WriteLine("Исходные списки:"); list1.Print();

list2.Print();

list1.Sort();

list2.Sort();

Console.WriteLine("\nОтсортированные списки:"); list1.Print();

list2.Print();

MyList mergedMyList = MyList.MergeSortedMyLists(list1, list2); Console.WriteLine("\nОбъединенный отсортированный список:"); mergedMyList.Print();

Console.WriteLine("\nПоиск элемента 4: " + mergedMyList.Search(4)); Console.WriteLine("Поиск элемента 10: " + mergedMyList.Search(10));

14

Console.WriteLine("Удаление элемента 4: " + mergedMyList.RemoveItem(4)); Console.WriteLine("Список после удаления:");

mergedMyList.Print();

Console.WriteLine("Очистка списка: " + mergedMyList.Clear());

} } Console.WriteLine("Размер после очистки: " + mergedMyList.Size);

15

Соседние файлы в папке Практики(Вариант №7)