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



SortedList si = new SortedList();

 

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

si.Add("здание", "жилое помещение");

si.Add("автомашина", "транспортное средство");

si.Add("книга", "набор печатных слов");

si.Add("яблоко", "съедобный плод");

 

Добавить элементы с помощью индексатора,

si["трактор"] = "сельскохозяйственная машина";

 

Получить коллекцию ключей.

ICollection с = si.Keys;

 

Использовать ключи для получения значений.

Console.WriteLine("Содержимое списка по индексатору.");

Foreach(string str in с)

Console.WriteLine(str + ": " + si[str]);

 

Console.WriteLine();

 

Отобразить список, используя целочисленные индексы.

Console.WriteLine("Содержимое списка по целочисленным индексам.");

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

Console.WriteLine(si.GetByIndex(i)) ;

 

Console.WriteLine() ;

 

Показать целочисленные индексы элементов списка.

Console.WriteLine("Целочисленные индексы элементов списка.");

Foreach(string str in с)

Console.WriteLine(str + ": " + si.IndexOfKey(str));

}

}

 

Ниже приведен результат выполнения этой программы.

 

Содержимое списка по индексатору.

Автомашина: транспортное средство

Здание: жилое помещение

Книга: набор печатных слов

Трактор: сельскохозяйственная машина

Яблоко: съедобный плод

 

Содержимое списка по целочисленным индексам.

Транспортное средство

Жилое помещение

Набор печатных слов

Сельскохозяйственная машина

Съедобный плод

 

Целочисленные индексы элементов списка.

Автомашина: 0

Здание: 1

Книга: 2

Трактор: 3

Яблоко: 4

 

 

Класс Stack

 

Как должно быть известно большинству читателей, стек представляет собой список, действующий по принципу "первым пришел — последним обслужен". Этот принцип действия стека можно наглядно представить на примере горки тарелок, стоящих на столе. Первая тарелка, поставленная в эту горку, извлекается из нее последней. Стек относится к одним из самых важных структур данных в вычислительной технике. Он нередко применяется, среди прочего, в системном программном обеспечении, компиляторах, а также в программах отслеживания в обратном порядке на основе искусственного интеллекта

Класс коллекции, поддерживающий стек, носит название Stack. В нем реализуются интерфейсы ICollection, IEnumerable и ICloneable. Этот класс создает динамическую коллекцию, которая расширяется по мере потребности хранить в ней вводимые элементы. Всякий раз, когда требуется расширить такую коллекцию, ее емкость увеличивается вдвое.

В классе Stack определяются следующие конструкторы.

 

Public Stack()

public Stack(int initialCapacity)  

public Stack(ICollection col)  

 

В первой форме конструктора создается пустой стек, во второй форме — пустой стек, первоначальный размер которого определяет первоначальная емкость, задаваемая параметром initialCapacity, ив третьей форме — стек, содержащий элементы указываемой коллекции col. Его первоначальная емкость равна количеству указанных элементов.

В классе Stack определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса приведены в табл. 25.7. Эти методы обычно применяются следующим образом. Для того чтобы поместить объект на вершине стека, вызывается метод Push(). А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Pop(). Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реек(). А если вызвать метод Pop() или Реек(), когда вызывающий стек пуст, то сгенерируется исключение InvalidOperationException.

 

Таблица 25.7. Наиболее часто используемые методы, определенные в классе Stack

 

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

 

public virtual void Clear() -  Устанавливает свойство Count равным нулю, очищая, по существу, стек

public virtual bool Contains (object obj) -  Возвращает логическое значение true, если объект obj содержится в вызывающем стеке, а иначе — логическое значение false

public virtual object Peek() - Возвращает элемент, находящийся на вершине стека, но не удаляет его

public virtual object Pop() -  Возвращает элемент, находящийся на вершине стека, удаляя его по ходу дела

public virtual void Push (object obj) - Помещает объект obj в стек

public static Stack Synchronized(Stack stack) -  Возвращает синхронизированный вариант коллекции типа Stack, передаваемой в качестве параметра stack

public virtual object[] ToArray() -  Возвращает массив, содержащий копии элементов вызывающего стека

 

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

 

// Продемонстрировать применение класса Stack.

using System;

using System.Collections;

class StackDemo {

static void ShowPush(Stack st, int a) {

st.Push(a);

Console.WriteLine("Поместить в стек: Push(" + a + ")");

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

Foreach(int i in st)

Console.Write(i + " ");

Console.WriteLine();

}

 

static void ShowPop(Stack st) {

Console.Write("Извлечь из стека: Pop -> ");

int a = (int) st.Pop();

 

Console.WriteLine(а);

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

Foreach(int i in st)

Console.Write(i + " ");

 

Console.WriteLine();

}

 

static void Main() {

Stack st = new Stack();

 

Foreach(int i in st)

Console.Write(i + " ");

 

Console.WriteLine();

 

ShowPush(st, 22);

ShowPush(st, 65);

ShowPush(st, 91);

ShowPop(st);

ShowPop(st);

ShowPop(st) ;

try {

ShowPop(st) ;

} catch (InvalidOperationException) {

Console.WriteLine("Стек пуст.");

}

}

}

 

Ниже приведен результат выполнения этой программы. Обратите внимание на то, как обрабатывается исключение InvalidOperationException, генерируемое при попытке извлечь элемент из пустого стека.

 

 

Поместить в стек: Push(22)

Содержимое стека: 22

Поместить в стек: Push(65)

Содержимое стека: 65 22

Поместить в стек: Push(91)

Содержимое стека: 91 65 22

Извлечь из стека: Pop -> 91

Содержимое стека: 65 22

Извлечь из стека: Pop -> 65

Содержимое стека: 22

Извлечь из стека: Pop -> 22

Содержимое стека:

Извлечь из стека: Pop -> Стек пуст.

 

 

Класс Queue

 

Еще одной распространейной структурой данных является очередь, действующая по принципу: первым пришел — первым обслужен. Это означает, что первым из очереди извлекается элемент, помещенный в нее первым. Очереди часто встречаются в реальной жизни. Многим из нас нередко приходилось стоять в очередях к кассе в банке, магазине или столовой. В программировании очереди применяются для хранения таких элементов, как процессы, выполняющиеся в данный момент в системе, списки приостановленных транзакций в базе данных или пакеты данных, полученные по Интернету. Кроме того, очереди нередко применяются в области имитационного моделирования.

Класс коллекции, поддерживающий очередь, носит название Queue. В нем реализуются интерфейсы ICollection, IEnumerable и ICloneable. Этот класс создает динамическую коллекцию, которая расширяется, если в ней необходимо хранить вводимые элементы. Так, если в очереди требуется свободное место, ее размер увеличивается на коэффициент роста, который по умолчанию равен 2,0.

В классе Queue определяются приведенные ниже конструкторы.

 

Public Queue()

public Queue (int capacity)  

public Queue (int capacity, float growFactor)  

public Queue (ICollection col)  

 

В первой форме конструктора создается пустая очередь с выбираемыми по умолчанию емкостью и коэффициентом роста 2,0. Во второй форме создается пустая очередь, первоначальный размер которой определяет емкость, задаваемая параметром capacity, а коэффициент роста по умолчанию выбирается для нее равным 2,0. В третьей форме допускается указывать не только емкость (в качестве параметра capaci ty), но и коэффициент роста создаваемой очереди (в качестве параметра growFactor в пределах от 1,0 до 10,0). И в четвертой форме создается очередь, состоящая из элементов указываемой коллекции col. Ее первоначальная емкость равна количеству указанных элементов, а коэффициент роста по умолчанию выбирается для нее равным 2,0.

В классе Queue определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.8. Эти методы обычно применяются следующим образом. Для того чтобы поместить объект в очередь, вызывается метод Enqueue(). Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод Dequeue(). Если же требуется извлечь, но не удалять следующий объект из очереди, то вызывается метод Реек(). А если методы Dequeue() и Реек() вызываются, когда очередь пуста, то генерируется исключение InvalidOperationException.

 

Таблица 25.8. Наиболее часто используемые методы, определенные в классе Queue

 

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

 

public virtual void Clear() -  Устанавливает свойство Count равным нулю, очищая, по существу, очередь

public virtual bool Contains(object obj) -  Возвращает логическое значение true, если объект obj содержится в вызывающей очереди, а иначе — логическое значение false

public virtual object Dequeue() -  Возвращает объект из начала вызывающей очереди. Возвращаемый объект удаляется из очереди

public virtual void Enqueue(object obj) - Добавляет объект obj в конец очереди

public virtual object Peek() -  Возвращает объект из начала вызывающей очереди, но не удаляет его

public static Queue Synchronized(Queue queue) -  Возвращает синхронизированный вариант коллекции типа Queue, передаваемой в качестве параметра queue

public virtual object[] ToArray() -  Возвращает массив, который содержит копии элементов из вызывающей очереди

public virtual void TrimToSize() - Устанавливает значение свойства Capacity равным значению свойства Count

 

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

Queue.

 

// Продемонстрировать применение класса Queue.

using System;

using System.Collections;

 

class QueueDemo {

static void ShowEnq(Queue q, int a) {

q.Enqueue(a) ;

 

Console.WriteLine("Поместить в очередь: Enqueue(" + a + ")");

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

Foreach(int i in q)

Console.Write(i + " ");

 

Console.WriteLine() ;

}

 

static void ShowDeq(Queue q) {

Console.Write("Извлечь из очереди: Dequeue -> ");

int a = (int) q.Dequeue();

 

Console.WriteLine(a);

 

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

Foreach(int i in q)

Console.Write(i + " ") ;

 

Console.WriteLine();

}

 

static void Main() {

Queue q = new Queue();

Foreach(int i in q)

Console.Write(i + " ");

 

ShowEnq(q, 22);

ShowEnq(q, 65);

ShowEnq(q, 91);

ShowDeq(q);

ShowDeq(q);

ShowDeq(q);

try {

ShowDeq (q);

} catch (InvalidOperationException) {

Console.WriteLine("Очередь пуста.");

}

}

}

 

Эта программа дает следующий результат.

 


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

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






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