p5.js | Нажать операцию на стек

Опубликовано: 6 Августа, 2021

Что такое стек?
Стек представляет собой линейную структуру данных, подобную массиву, в котором можно получить доступ только к последнему вставленному элементу. Эта структура данных работает по принципу «последний пришел - первым ушел» (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) в начало стека.