Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2868 / 252 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 4:

Контейнеры

Эмуляция очереди

Чтобы эмулировать очередь, мы должны научиться помещать элементы в массив с одной стороны, а вынимать их с другой. Поскольку мы уже умеем добавлять элементы в конец массива, нам нужно вынимать их спереди. Для этого существует метод 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: Конденсатор,Микропроцессор,Транзистор