Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вопросы к экзамену.docx
Скачиваний:
5
Добавлен:
28.12.2024
Размер:
430.24 Кб
Скачать

Алгоритм[править | править код]

  • Пока не все токены обработаны:

  • Прочитать токен.

  • Если токен — число, то добавить его в очередь вывода.

  • Если токен — функция, то поместить его в стек.

  • Если токен — разделитель аргументов функции (например, запятая):

  • Пока токен на вершине стека не открывающая скобка:

    • Переложить оператор из стека в выходную очередь.

    • Если стек закончился до того, как был встречен токен открывающая скобка, то в выражении пропущен разделитель аргументов функции (запятая), либо пропущена открывающая скобка.

  • Если токен — оператор op1, то:

  • Пока присутствует на вершине стека токен оператор op2, чей приоритет выше или равен приоритету op1, и при равенстве приоритетов op1 является левоассоциативным:

    • Переложить op2 из стека в выходную очередь;

  • Положить op1 в стек.

  • Если токен — открывающая скобка, то положить его в стек.

  • Если токен — закрывающая скобка:

  • Пока токен на вершине стека не открывающая скобка

    • Переложить оператор из стека в выходную очередь.

    • Если стек закончился до того, как был встречен токен открывающая скобка, то в выражении пропущена скобка.

  • Выкинуть открывающую скобку из стека, но не добавлять в очередь вывода.

  • Если токен на вершине стека — функция, переложить её в выходную очередь.

  • Если больше не осталось токенов на входе:

  • Пока есть токены операторы в стеке:

  • Если токен оператор на вершине стека — открывающая скобка, то в выражении пропущена скобка.

  • Переложить оператор из стека в выходную очередь.

  • Конец.

  1. Ассоциативный массив – абстрактный тип данных, который нужен для хранения пар ключ – значение.

хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.

Ассоциативный массив — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу:

  • INSERT(ключ, значение)

  • FIND(ключ)

  • REMOVE(ключ)

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

В паре (�,�)k,v значение �v называется значением, ассоциированным с ключом �k. Где �k — это key, a �v — value. Семантика и названия вышеупомянутых операций в разных реализациях ассоциативного массива могут отличаться.

Операция FIND(ключ) возвращает значение, ассоциированное с заданным ключом, или некоторый специальный объект UNDEF, означающий, что значения, ассоциированного с заданным ключом, нет. Две другие операции ничего не возвращают (за исключением, возможно, информации о том, успешно ли была выполнена данная операция).

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

Самая простая реализация может быть основана на обычном массиве, элементами которого являются пары (ключ, значение). Для ускорения операции поиска можно упорядочить элементы этого массива по ключу и осуществлять нахождение методом бинарного поиска. 

Хеш-табли́ца — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию удаления и операцию поиска пары по ключу.

Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение играет роль индекса в массиве

Затем выполняемая операция (добавление, удаление или поиск) перенаправляется объекту, который хранится в соответствующей ячейке массива

Ситуация, когда для различных ключей получается одно и то же хеш-значение, называется коллизией

Существует несколько способов разрешения коллизий.

Метод списков

Каждая ячейка массива H является указателем на связный список пар ключ-значение, соответствующих одному и тому же хеш-значению ключа. Коллизии просто приводят к тому, что появляются списки длиной более одного элемента.

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

Метод двойного хеширования

Метод открытой адресации