72 lines
3.3 KiB
Markdown
72 lines
3.3 KiB
Markdown
![]() |
---
|
|||
|
id: 587d8250367417b2b2512c5e
|
|||
|
title: Основи роботи зі стеком
|
|||
|
challengeType: 1
|
|||
|
forumTopicId: 301705
|
|||
|
dashedName: learn-how-a-stack-works
|
|||
|
---
|
|||
|
|
|||
|
# --description--
|
|||
|
|
|||
|
На вашому столі, певно, є стос книг. Ви, ймовірно, використовували функцію скасування в текстовому редакторі, правда ж? А ще, вірогідно, ви часто натискаєте на кнопку "Назад" у вашому телефоні, щоб повернутися до попередньої переглянутої вкладки в застосунку.
|
|||
|
|
|||
|
Знаєте, що у них спільного? Всі вони зберігають дані так, щоб ви могли повернутися до них.
|
|||
|
|
|||
|
Верхня книга у стосі це та, яку поклали туди останньою. Якщо ви заберете цю книгу зі стосу, то побачите наступну - ту, яку поклали туди перед останньою, і так далі.
|
|||
|
|
|||
|
А тепер подумаймо: у всіх вищенаведених прикладах ви отримуєте тип сервісу <dfn>Last-In-First-Out</dfn> (Останній прийшов - перший пішов). Ми спробуємо зімітувати цей принцип за допомогою нашого коду.
|
|||
|
|
|||
|
Така схема зберігання даних називається <dfn>стеком</dfn>. Зокрема, нам потрібно буде реалізувати метод `push()`, який поміщає об'єкти JavaScript до вершини стеку; та метод `pop()`, який вилучає об'єкт JavaScript, який на цей момент знаходиться на вершині стеку.
|
|||
|
|
|||
|
# --instructions--
|
|||
|
|
|||
|
Ось наш стек домашніх завдань, поданих у вигляді масиву: `"BIO12"` - в основі стеку, а `"PSY44"` - на його вершині.
|
|||
|
|
|||
|
Змініть даний масив і розгляньте його як `stack`, використовуючи згадані вище методи JavaScript. Вилучіть верхній елемент `"PSY44"` зі стека. Потім додайте `"CS50"` у якості нового верхнього елемента стеку.
|
|||
|
|
|||
|
# --hints--
|
|||
|
|
|||
|
Стек `homeworkStack` повинен містити лише 4 елементи.
|
|||
|
|
|||
|
```js
|
|||
|
assert(homeworkStack.length === 4);
|
|||
|
```
|
|||
|
|
|||
|
Останній елемент у стеку `homeworkStack` має бути `"CS50"`.
|
|||
|
|
|||
|
```js
|
|||
|
assert(homeworkStack[3] === 'CS50');
|
|||
|
```
|
|||
|
|
|||
|
Стек `homeworkStack` не повинен містити елементу `"PSY44"`.
|
|||
|
|
|||
|
```js
|
|||
|
assert(homeworkStack.indexOf('PSY44') === -1);
|
|||
|
```
|
|||
|
|
|||
|
Початковий опис стеку `homeworkStack` не повинен бути зміненим.
|
|||
|
|
|||
|
```js
|
|||
|
assert(
|
|||
|
code.match(/=/g).length === 1 &&
|
|||
|
/homeworkStack\s*=\s*\["BIO12"\s*,\s*"HIS80"\s*,\s*"MAT122"\s*,\s*"PSY44"\]/.test(
|
|||
|
code
|
|||
|
)
|
|||
|
);
|
|||
|
```
|
|||
|
|
|||
|
# --seed--
|
|||
|
|
|||
|
## --seed-contents--
|
|||
|
|
|||
|
```js
|
|||
|
var homeworkStack = ["BIO12","HIS80","MAT122","PSY44"];
|
|||
|
// Only change code below this line
|
|||
|
```
|
|||
|
|
|||
|
# --solutions--
|
|||
|
|
|||
|
```js
|
|||
|
// solution required
|
|||
|
```
|