Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗМУ по КР ЯиСП.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
211 Кб
Скачать
☆

Стеки и очереди

Стеки и очереди - это множества, элементы которых упорядочены по вре­мени включения их в эти множества.

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

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

1) записать новый элемент в вершину стека;

2) выбрать последний из записанных элементов стека

Обычно длина стека фиксируется исходя из максимального количества элементов, которые могут быть записаны в стек. В этом случае для представле­ния стека можно использовать одномерный массив заданной длины. Элемент, проталкиваемый в стек, запоминается в первом свободном поле массива с ми­нимальным индексом. Информация о местоположении этого элемента запоми­нается в специальном поле памяти - указателе на вершину стека.

Процедура занесения элемента в стек может состоять из следующих шагов:

1. Начало. Для реализации процедуры необходимо задать адрес нового элемента и указать на вершину стека.

2. Проверить, исчерпан ли стек.

  1. Если стек исчерпан, выдать сообщение об отказе на включение нового элемента. Конец.

  2. Если стек не исчерпан, записать новый элемент в стек

  3. Конец.

Обратная польская запись арифметических выражений

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

Например, арифметические выражения: a+b; a*x-b/(c-d) имеют следую­щие обратные польские записи: ab+; ax*bcd-/-.

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

Для преобразования арифметического выражения в обратную польскую запись может быть применен известный алгоритм, использующий стек с при­оритетами.

Каждому знаку в арифметическом выражении присваивается приоритет в соответствии с табл. 3. Арифметическое выражение просматривается слева направо. Операнды выражения переписываются в выходную строку, а знаки опе­раций помешаются в стек, если их приоритет равен нулю или больше приори­тета знака, находящегося в вершине стека.

Таблица 3 - Приоритеты знаков

Знаки операции

Приоритет

(

)

+ -

* /

↑

0

1

2

3

4

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

Множества

Множества - это неупорядоченная совокупность некоторых объектов, называемых элементами. Элементами можно считать любые объекты, которые могут быть названы или определены с помощью какого-либо правила, задаю­щего принадлежность множеству.

Множество можно хранить в памяти как массив, или список описаний элементов этого множества. Операции над множествами выполняются с помощью процедур обработки массивов и списков.

Пример

Отношение "а делит b без остатка", определенное на множестве

А={2,3,4,6,12,15,30}, может быть представлено cледующей матрицей:

а\b 2 3 5 6 12 15 30

2 1 0 0 1 1 0 1

3 0 1 0 1 1 1 1

5 0 0 1 0 0 1 1

6 0 0 0 1 1 0 1

12 0 0 0 0 1 0 0

15 0 0 0 0 0 1 1

30 0 0 0 0 0 0 1

По квадратной матрице порядка n, задающей некоторое бинарное отношение на множестве мощностью n, легко проверяются основные свойства этого отношения. Так, для установления рефлексивности достаточно убедиться, что все диагональные элементы матрицы равны 1.

Строки

Строка - это всякая конечная последовательность элементов над непус­тым конечным множеством элементов (букв). Строки обладают следующими свойствами:

  1. Строки строятся из конечного числа букв, но их длина переменная,

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

3. Если рассматривать строки, как предложения некоторого языка, то не любая последовательность букв будет допустимой правилами этого языка. Для хранения строк используют как векторный, так и списковый способы.

Рассмотрим несколько вариантов представления строк в памяти.

А) для каждой строки отводится поле одной и той же длины, при этом "короткие" слова дополняются пробелами, а "длинные" слова рассматриваются как недопустимые:

В) каждая строка хранится в последовательных полях памяти, началом которых служит специальное поле со счетчиком числа составляющих строку: 3три; 5шесть.

С) способ, при котором существует специальный символ конца строки, например «х»