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

СД Практика 3

.pdf
Скачиваний:
4
Добавлен:
17.06.2025
Размер:
578 Кб
Скачать
☆

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

11

2.8 Метод Merge()

Метод предназначен для слияния двух двусвязных списков. Он вставляет второй список otherList в первый список начиная с заданного индекса. С

помощью цикла while находится индекс элемента, с которого мы хотим вставить второй список. Если введенный индекс превышает количество узлов в списке, то метод завершается. Происходит проверка второго списка: если он не пустой, то начальному узлу второго списка присваивается ссылка Prev на узел перед точкой вставки. Ссылка Next конечного узла устанавливается на узел после точки вставки. Также осуществляется проверка на наличие последнего узла после точки вставки: если есть, то устанавливается ссылка Prev у узла после точки вставки на последний узел второго списка. Если точка вставки – конец списка, то устанавливается tail первого списка на последний узел второго и устанавливается ссылка Next у узла перед точкой вставки на первый узел второго списка. Метод представлен на рисунке 2.8.

12

Рисунок 2.8 – Метод Merge()

13

2.9 Метод PrintList()

Метод предназначен для вывода списков на консоль. Переменная current ставится на начальный узел выводимого списка. С помощью цикла while выводятся один за одним данные из узлов через пробел. Метод представлен на рисунке 2.9.

Рисунок 2.9 – Метод PrintList()

Результат работы всей программы представлен на рисунке 2.10.

14

Рисунок 2.10 – Результат

15

Заключение

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

16

Приложение А

public class Node

{

public int Data; public Node Next; public Node Prev;

public Node(int data)

{

Data = data;

Next = null;

Prev = null;

}

}

public class List

{

private Node head; private Node tail;

public List()

{

head = null; tail = null;

}

// Добавление элемента в конец списка public bool Add(int element)

{

17

Node newNode = new Node(element); if (head == null)

{

head = newNode; tail = newNode;

}

else

{

tail.Next = newNode; newNode.Prev = tail; tail = newNode;

}

return true;

}

// Удаление элемента из списка public bool RemoveItem(int element)

{

Node current = head; while (current != null)

{

if (current.Data == element)

{

if (current.Prev != null)

{

current.Prev.Next = current.Next;

}

else

{

18

head = current.Next;

}

if (current.Next != null)

{

current.Next.Prev = current.Prev;

}

else

{

tail = current.Prev;

}

return true;

}

current = current.Next;

}

return false;

}

// Очистка списка public bool Clear()

{

head = null; tail = null; return true;

}

// Поиск элемента

public int Search(int element)

19

{

Node current = head; int index = 0;

while (current != null)

{

if (current.Data == element)

{

return index;

}

current = current.Next; index++;

}

return -1;

}

// Поиск элемента по индексу

public int? SearchByIndex(int index)

{

Node current = head; int count = 0;

while (current != null)

{

if (count == index)

{

return current.Data;

}

current = current.Next; count++;

}

20

Соседние файлы в предмете Структуры данных