Практики(Вариант №7) / Практическая работа №3
.pdfЗаключение
В ходе работы был создан простой динамический циклический список, который включает реализацию базовых операций — добавление, удаление, очистку и поиск элементов. Дополнительно реализованы функции для сортировки и объединения двух списков.
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
}
} 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 |
|
|
|
|
|
|
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
