p5.js | Нажать операцию на стек
Что такое стек?
Стек представляет собой линейную структуру данных, подобную массиву, в котором можно получить доступ только к последнему вставленному элементу. Эта структура данных работает по принципу «последний пришел - первым ушел» (LIFO). Это очень быстро, поскольку он должен обращаться только к последнему добавленному элементу, поэтому для этого требуется постоянное время, имеющее сложность O (1) .
Стеки следует использовать над массивами, когда нам нужно работать с данными в форме LIFO. Операция выталкивания в стек используется для добавления элемента в стек. Если стек заполнен, это называется условием переполнения.
Базовый скелет стека: Ниже приведен пример запуска с использованием команды «$ node skeleton.js» для получения базового скелета стека.
// Define Stack function function Stack(array) { this .array = []; if (array) this .array = array; } // Add Get Buffer property to object // constructor which slices the array Stack.prototype.getBuffer = function () { return this .array.slice(); } // Add isEmpty properties to object constructor // which returns the length of the array Stack.prototype.isEmpty = function () { return this .array.length == 0; } // Instance of the stack class var stack1 = new Stack(); // Stack { array: [] } console.log(stack1); |
Пример: в этом примере описывается операция проталкивания в стек.
<!DOCTYPE html> <html> <head> <title>Stack push operation</title> <meta charset= "UTF-8" > <script src= type= "text/javascript" ></script> <style> body { padding: 0; margin: 0; } canvas { vertical-align: top; } </style> </head> <title> <script> // Define Stack function function Stack(array) { this .array = []; if (array) this .array = array; } // Add Get Buffer property to object // constructor which slices the array Stack.prototype.getBuffer = function () { return this .array.slice(); } // Add isEmpty properties to object constructor // which returns the length of the array Stack.prototype.isEmpty = function () { return this .array.length == 0; } // Instance of the stack class var stack1 = new Stack(); //Stack { array: [] } // Add Push property to object constructor which // push elements to the array Stack.prototype.push = function (value) { this .array.push(value); } function setup() { // Create Canvas of size display width * 300 createCanvas(displayWidth, 300); } function draw() { // Set background color background( "grey" ); // Set stroke weight strokeWeight(3); // Set stroke color stroke( 'black' ); line(10, 45, 90, 45); rect(10, 30, 40, 30); noStroke(); text( "TOP" , 20, 50); // Display stack for ( var i = stack1[ 'array' ].length-1; i >= 0; i--) { var p = 10; translate(70, 0); strokeWeight(3); stroke( 'black' ); line(10+p, 45, p+80, 45); noStroke(); rect(10+p, 30, 40+p, 30); text(stack1[ 'array' ][i], 40, 50); p +=10; } } // Call to push operation stack1.push(1); stack1.push(2); stack1.push(3); stack1.push(19); stack1.push(11); stack1.push(12); </script> </body> </html> |
Выход:
После нажатия '14' вызовом функции stack1.push (14) в начало стека.