Беларусь, рогачёв |
Контейнеры
Эмуляция очереди
Чтобы эмулировать очередь, мы должны научиться помещать элементы в массив с одной стороны, а вынимать их с другой. Поскольку мы уже умеем добавлять элементы в конец массива, нам нужно вынимать их спереди. Для этого существует метод shift - он аналогичен методу pop, но действует с другого конца массива. Впрочем, можно организовать очередь и по-другому, вынимая элементы из конца массива методом pop. В таком случае нам понадобится помещать элементы в начало массива, и для этого служит метод unshift. Таким образом, мы можем использовать массив не только как очередь, но и как двунаправленную очередь или, иначе говоря, очередь с двусторонним доступом ( deque ). Мы даже можем устроить стек с помощью shift и unshift, хотя есть подозрения, что он будет работать чуть медленнее обычного. Вот примеры использования всех этих методов: мы сначала двигаем очередь в одну сторону, а потом в другую.
electro_array = ["Резистор", "Диод"]; trace("electro_array: " + electro_array); trace("push returns: " + electro_array.push("Транзистор", "Тиристор", "Дроссель")); trace("electro_array: " + electro_array); trace("shift returns: " + electro_array.shift()); trace("shift returns: " + electro_array.shift()); trace("electro_array: " + electro_array); trace("unshift returns: " + electro_array.unshift("Конденсатор", "Микропроцессор")); trace("electro_array: " + electro_array); trace("pop returns: " + electro_array.pop()); trace("pop returns: " + electro_array.pop()); trace("electro_array: " + electro_array);
На выходе имеем:
electro_array: Резистор,Диод push returns: 5 electro_array: Резистор,Диод,Транзистор,Тиристор,Дроссель shift returns: Резистор shift returns: Диод electro_array: Транзистор,Тиристор,Дроссель unshift returns: 5 electro_array: Конденсатор,Микропроцессор,Транзистор, Тиристор,Дроссель pop returns: Дроссель pop returns: Тиристор electro_array: Конденсатор,Микропроцессор,Транзистор