C# 4.0 полное руководство - 2011
Шрифт:
Console.WriteLine(str + ": " + si.IndexOfKey(str));
}
}
Ниже приведен результат выполнения этой программы.
Содержимое списка по индексатору, автомашина: транспортное средство здание: жилое помещение книга: набор печатных слов трактор: сельскохозяйственная Машина яблоко: съедобный плод
Содержимое списка по целочисленным индексам.
транспортное средство
жилое помещение
набор печатных слов
сельскохозяйственная
съедобный плод
Целочисленные индексы элементов списка.
автомашина: О
здание: 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 . Если же объект требуется только извлечь, но не удалить из вершины стека,
Таблица 25.7. Наиболее часто используемые методы, определенные в классе Stack
Метод
Описание
public virtual void Clear
public virtual bool Contains (object obj)
public virtual object Peek
public virtual object Pop
public virtual void Push (object obj) public static Stack Synchronized(Stack stack)
public virtual object[] ToArray
Устанавливает свойство Count равным нулю, очищая, по существу, стек
Возвращает логическое значение true, если объект obj содержится в вызывающем стеке, а иначе — логическое значение false Возвращает элемент, находящийся на вершине стека, но не удаляет его
Возвращает элемент, находящийся на вершине стека, удаляя его по ходу дела Помещает объект obj в стек
Возвращает синхронизированный вариант коллекции типа Stack, передаваемой в качестве параметра stack
Возвращает массив, содержащий копии элементов вызывающего стека
В приведенном ниже примере программы создается стек, в который помещается несколько целых значений, а затем они извлекаются обратно из стека.
// Продемонстрировать применение класса 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.PopO;
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);