1. Краткое введение в очередь и стеки
1.1. Основные понятия очередей
Очередь: это коллекция, которая поддерживает первое в первую очередь (FIFO), то есть в первую очередь вставленные данные получают сначала!
Как показано на рисунке ниже:
1.2. Основные понятия стека
Stack: Это коллекция, которая поддерживает последнее в первую очередь (LIFO), то есть данные, которые вставлены позже, первыми получают!
Как показано на рисунке ниже:
2. Реализация очередей и стеков в JavaScript
В JavaScript очереди и массивы в основном реализуются через массивы. Следующие методы предоставляются в массивах JS, чтобы нам было легко внедрить очереди и стеки:
• Сдвиг: удалите первый элемент из массива и верните значение этого элемента.
• Unshift: добавьте один или несколько элементов в начале массива и верните новую длину
• Нажмите: добавьте элемент в конце середины и верните новую длину
• POP: удалите последний элемент из массива и верните значение этого элемента.
2.1. Внедрить очереди
<script type = "text/javascript"> // Создать массив для моделирования очереди var a = new Array (); console.log (a); // unshift: добавить один или несколько элементов в начале массива и верните новую длину Console.log ("enter"); A.unshift () console.log (a); // -----> a.unshift (); console.log (a); // ----->, a.unshift (); console.log (a); //- ---->, a.unshift (); console.log (a); // ----->, a.unshift (); console.log (a); // ----> ,, a.unshift (); console.log (a); // ----> ,,, console .log ("Exit, First In, First Out"); Console.log (a); // pop: удалить последний элемент из массива и вернуть значение этого элемента a.pop (); // -----> console.log (a); a.pop (); // -----> console.log (a); a.pop (); // -----> console.log (a); a.pop (); // -----> console.log (a); a.pop (); // ------> console.log (a);Выходной эффект на консоли браузера Google показан на рисунке ниже:
2.2. Реализация стека
<script type = "text/javascript"> // Создать массив для моделирования стека var a = new Array (); console.log (a); // Нажмите: добавить один или несколько элементов в конце массива и вернуть новую длину console.log ("stack"); a.push () console.log (a); // -----> a.push (); console.log (a); // ----->, a.push (); console.log (a); // ------ ->,, a.push (); console.log (a); // ----->, a.push (); console.log (a); // ----> ,, a.push (); console.log (a); // ----> ,,, console.log (" Вне стека, сначала "); console.log (a); // pop: удалить последний элемент из массива и вернуть значение этого элемента a.pop (); // -----> console.log (a); a.pop (); // -----> console.log (a); a.pop (); // -----> console.log (a); a.pop (); // -----> console.log (a); a.pop (); // ------> console.log (a);Выходной эффект на консоли браузера Google показан на рисунке ниже:
2.3. Тестирование производительности метода push и непрерывного метода
Шаг и невышифрованные методы массива могут добавлять элементы в текущий массив. Разница в том, что в конце добавляется толчок, а в начале добавляется UNSTIFT. Из этого принципа мы можем знать, что эффективность Unshift относительно низкая. Причина в том, что каждый раз, когда он добавляет элемент, он перемещает существующий элемент в одну позицию. Но насколько велика разница в эффективности? Давайте пройдем простой тест ниже.
<script type = "text/javascript">/*Объяснение объяснения трюка "var s =+newdate ();" В коде следующее: =+Этот оператор не существует;+эквивалентен .valueof ();+Новая дата () эквивалентен новой дате (). = []; var startTime = +new Date (); //+new Date () эквивалентна новой дате (). } var endtime =+new Date (); console.log («Требуется время, чтобы вызвать метод push, чтобы добавить элемент в массив»+(endtime-starttime)+"ms"); startTime = +new Date (); arr = []; // Непрерывное тест производительности для (var i =; i <; i ++) {arr.unshift (i); } endtime =+new Date (); console.log («Требуется время, чтобы вызвать не устремленный метод, чтобы добавить элемент в массив»+(endtime-starttime)+"ms"); </script>Этот код выполняет 100 000 push и непрерывные операции соответственно и запускает его один раз в браузере Google. Результат показан на рисунке ниже:
Можно видеть, что без устремления примерно в 100 раз медленнее, чем толчок! Поэтому вы должны использовать непрерывно с осторожностью в повседневной жизни, особенно для больших массивов. Если вам необходимо достичь эффекта непрерывного, вы можете использовать обратный метод массива, который может отменить массив. Сначала добавьте элементы, которые должны быть помещены в массив с помощью толчка, а затем снова выполните реверс, чтобы достичь эффекта бездомного. например:
<script type = "text/javascript"> // Создать массив для моделирования стека var a = new Array (); // Использовать метод push для добавления элементов a.push () a.push (); a.push (); a.push (); console.log ("порядок элементов в массиве до реверсий"); Метод называется обратным, который может инвертировать массив. Сначала добавьте элементы, которые должны быть помещены в массив с толчком, а затем снова выполните обратный раз обратный раз, и эффект UNSTIFT достигается A.Reverse (); // Использовать метод обратного, чтобы отменить консоль массива.Выходной эффект на консоли браузера Google показан на рисунке ниже:
Судя по результатам бега, порядок элементов массива был отменен.
2.4. Тестирование производительности метода обратного
Какова производительность обратного? Давайте протестируем это снова:
<script type = "text/javascript"> var arr = [], s = +new Date; for (var i =; i <; i ++) {arr.push (i); } // Вызовите метод реверса, чтобы отменить порядок элементов в массиве arr.reverse (); Console.log («Вызов обратного метода, чтобы отменить порядок элементов в массиве:«+(+Новая дата - S)+"MSEC"); </script>Выходной эффект на консоли браузера Google показан на рисунке ниже:
Из эффекта бега мы видим, что обратный метод имеет чрезвычайно высокую производительность и может использоваться с уверенностью.
Выше приведено краткое изложение внедрения очередей и стеков через массивы в JavaScript, и я просто проверил преимущества в производительности и недостатки толкания, непрерывного и обратного при эксплуатации больших массивов.
Выше приведено очередь и стек в структуре данных реализации JavaScript Marry, введенной редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!