Студопедия

Главная страница Случайная лекция


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

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



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




Очереди

Читайте также:
  1. Очереди производителей.

Else

Else

Do

{

if (isBracket(begBracket, a[++i]))

myStack.Push(a[i]);

if (isBracket(endBracket, a[i]))

if (!myStack.isEmpty())

switch (myStack.Pop())

{

case '(':

if (a[i]!=')')

{result =i; error = true;}

break;

case '[':

if (a[i]!=']')

{result =i; error = true;}

break;

case '{':

if (a[i]!='}')

{result =i; error = true;}

break;

}

{ error = true; result = i; }

}

while (!error && (i != lenA-1));

if (!myStack.isEmpty() || error)

result = i;

return result;

}

Для вызова процедуры достаточно написать одну строчку кода:

Console.WriteLine(BracketTest("{aaa(bbb)cc[ss[]}"));

Для данной строки на экране будет напечатано число 17. Это означает, что в 17-ой позиции строки ошибка – напечатана скобка }, а должна быть сначала скобка ].

 

В программировании принцип работы с очередью тот же самый, что и в быту: первым пришел — первым ушел (FIFOот англ.FirstInFirstOut).

Очередь — это структура, в которую новой элемент добавляется только с одной стороны. Эта сторона называется концом или хвостом очереди. Говорят, что элемент добавляется в конец очереди. Взятие элемента из очереди происходит с другой стороны — из начала (или из головы) очереди.

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

Основные операции c очередью те же, что и со стеком:

· инициализация очереди;

· добавление элемента в очередь;

· проверка очереди на пустоту;

· взятие элемента из очереди.

В зависимости от характера решаемой задачи очередь можно организовать статически или динамически. Если в процессе работы очередь то очень длинная (несколько десятков или сотен элементов), то короткая (один-два элемента), имеет смысл реализовать очередь с использованием динамической структуры (списка). Если заранее известна максимальная длина очереди, то можно использовать статический массив. Рассмотрим оба этих способа.

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

Листинг 8.25. Очередь, реализованная динамически

namespace SpaceStack

{

class MyStack // Очередь

{

Node top; // голова очереди

Node tail; // хвост очереди

public void Push(object data) // в стек

public object Pop() // взять из стека

public bool isEmpty() // проверка на пустоту

public class Node // узел

// положить в хвост очереди

public void PushQueue(object inf)

{

Node p = new Node(null, inf);

if (isEmpty())

{

top = p; tail = p;

}


<== предыдущая страница | следующая страница ==>
Динамический стек | Систематизация и хранение информации. Замечание. Метод Pop() — взятия элемента из очереди — вызывается только в том случае, если очередь не пуста

Дата добавления: 2014-03-11; просмотров: 350; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.005 сек.