Создать коллекцию в виде динамического массива.



List<char> lst = new List<char>();

 

Console.WriteLine("Исходное количество элементов: " + lst.Count);

 

Console.WriteLine();

 

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

Добавить элементы в динамический массив.

lst.Add('С');

lst.Add('А');

lst.Add('Е');

lst.Add('В');

lst.Add('D');

lst.Add('F');

Console.WriteLine("Количество элементов: " + lst.Count);

 

Отобразить содержимое динамического массива,

Используя индексирование массива.

Console.Write("Текущее содержимое: ");

for (int i=0; i < lst.Count;. i++)

Console.Write(lst[i] + " ");

 

Console.WriteLine("\n");

 

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

Удалить элементы из динамического массива.

lst.Remove('F');

lst.Remove('А');

Console.WriteLine("Количество элементов: " + lst.Count);

 

Отобразить содержимое динамического массива, используя цикл foreach.

Console.Write("Содержимое: ");

Foreach(char с in lst)

Console.Write(с + " ");

 

Console.WriteLine("\n");

 

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

Добавить количество элементов, достаточное для

Принудительного расширения массива,

for(int i=0; i < 20; i++)

lst.Add((char) ('a' + i));

 

Console.WriteLine("Текущая емкость: " + lst.Capacity);

Console.WriteLine("Количество элементов после добавления 20 новых: " + lst.Count);

 

Console.Write("Содержимое: ");

Foreach(char с in lst)

Console.Write(с + " ") ;

 

Console.WriteLine("\n");

 

Изменить содержимое динамического массива,

Используя индексирование массива.

Console.WriteLine("Изменить три первых элемента");

lst[0] = 'X';

lst[1] = 'Y' ;

lst[2] = 'Z';

 

Console.Write("Содержимое: ");

Foreach(char с in lst)

Console.Write(с + " ");

 

Console.WriteLine();

 

Следующая строка кода недопустима из-за

Нарушения безопасности обобщенного типа.

// lst.Add(99); // Ошибка, поскольку это не тип char!

}

}

Эта версия программы дает такой же результат, как и предыдущая.

 

Исходное количество элементов: 0

 

Добавить 6 элементов

Количество элементов: 6

Текущее содержимое: С А Е В D F

 

Удалить 2 элемента

Количество элементов: 4

Содержимое: С Е В D

 

Добавить еще 20 элементов

Текущая емкость: 32

Количество элементов после добавления 20 новых: 24

Содержимое: С Е В D a b c d e f g h i j k l m n o p q r s t

 

Изменить три первых элемента

Содержимое: X Y Z D a b c d e f g h i j k l m n o p q r s t

 

 

Класс LinkedList<T>

 

В классе LinkedList<T> создается коллекция в виде обобщенного двунаправленного списка. В этом классе реализуются интерфейсы ICollection, ICollection<T>, IEnumerable, IEnumerable<T>, ISerializable и IDeserializationCallback. В двух последних интерфейсах поддерживается сериализация списка. В классе LinkedList<T> определяются два приведенных ниже открытых конструктора.

 

Public LinkedListO

public LinkedList(IEnumerable<T> collection)

 

В первом конструкторе создается пустой связный список, а во втором конструкторе — список, инициализируемый элементами из коллекции collection.

Как и в большинстве других реализаций связных списков, в классе LinkedList<T> инкапсулируются значения, хранящиеся в узлах списка, где находятся также ссылки на предыдущие и последующие элементы списка. Эти узлы представляют собой объекты класса LinkedListNode<T>. В классе LinkedListNode<T> предоставляются четыре следующих свойства.

 

public LinkedListNode<T> Next { get; }

public LinkedListNode<T> Previous { get; }

public LinkedList<T> List { get; }

public T Value { get; set; }

 

С помощью свойств Next и Previous получаются ссылки на предыдущий и последующий узлы списка соответственно, что дает возможность обходить список в обоих направлениях. Если же предыдущий или последующий узел отсутствует, то возвращается пустая ссылка. Для получения ссылки на сам список служит свойство List. А с помощью свойства Value можно устанавливать и получать значение, находящееся в узле списка.

В классе LinkedList<T> определяется немало методов. В табл. 25.16 приведены наиболее часто используемые методы данного класса. Кроме того, в классе LinkedList<T> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.

 

public LinkedListNode<T> First { get; }

public LinkedListNode<T> Last { get; }

 

С помощью свойства First получается первый узел в списке, а с помощью свойства Last — последний узел в списке.

 

Таблица 25.16. Наиболее часто используемые методы, определенные в классе LinkedList<T>

Метод -  Описание

 

public LinkedListNode<T> AddAfter(LinkedListNode<T>  node , T value) -  Добавляет в список узел со значением value непосредственно после указанного узла node. Указываемый узел node не должен быть пустым (null). Метод возвращает ссылку на узел, содержащий значение value

public void AddAfter(LinkedListNode<T>  node, LinkedListNode<T>  newNode) -  Добавляет в список новый узел newNode непо

средственно после указанного узла node. Указываемый узел node не должен быть пустым (null). Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то* генерируется исключение InvalidOperationException

public LinkedListNode<T> AddBefore(LinkedListNode<T>  node, T value) -  Добавляет в список узел со значением value непо

средственно перед указанным узлом node. Указываемый узел node не должен быть пустым (null). Метод возвращает ссылку на узел, содержащий значение value

public void AddBefore(LinkedListNode<T>  node , LinkedListNode<T>  newNode) -  Добавляет в список новый узел newNode не

посредственно перед указанным узлом node.  Указываемый узел node не должен быть пустым (null). Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то генерируется исключение InvalidOperationException

public LinkedList<T> AddFirst(T value) -  Добавляет узел со значением value в начало списка. Метод возвращает ссылку на узел, содержащий значение value

public void AddFirst(LinkedListNode  node) -  Добавляет узел node в начало списка. Если узел node является частью другого списка, то генерируется исключение InvalidOperationException

public LinkedList<T> AddLast(T value) -  Добавляет узел со значением value в конец списка. Метод возвращает ссылку на узел, содержащий значение value

public void AddLast(LinkedListNode node) -  Добавляет узел node в конец списка. Если узел node является частью другого списка, то генерируется исключение InvalidOperationException

public LinkedList<T> Find(T  value) -  Возвращает ссылку на первый узел в списке, имеющий значение value. Если искомое значение value отсутствует в списке, то возвращается пустое значение

public LinkedList<T> FindLast(T value) -  Возвращает ссылку на последний узел в списке, имеющий значение value. Если искомое значение value отсутствует в списке, то возвращается пустое значение

public bool Remove(T  value) -  Удаляет из списка первый узел, содержащий значение value. Возвращает логическое значение true, если узел удален, т.е. если узел со значением value обнаружен в списке и удален; в противном случае возвращает логическое значение false

public void Remove(LinkedList<T>  node) -  Удаляет из списка узел, соответствующий указанному узлу node. Если узел node отсутствует в списке, то генерируется исключение InvalidOperationException

public void RemoveFirst() -  Удаляет из списка первый узел

public void RemoveLast() -  Удаляет из списка последний узел

 

В приведенном ниже примере программы демонстрируется применение класса LinkedList<T>.

 

// Продемонстрировать применение класса LinkedList<T>.

using System;

using System.Collections.Generic;

 

class GenLinkedListDemo {

static void Main() {

Создать связный список.

LinkedList<char> ll = new LinkedList<char>();

 

Console.WriteLine("Исходное количество элементов в списке: " + ll.Count);

 

Console.WriteLine();

 

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


Дата добавления: 2019-02-12; просмотров: 283; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!