Files

168 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 587d8250367417b2b2512c5f
title: Створення класу Stack
challengeType: 1
forumTopicId: 301633
dashedName: create-a-stack-class
---
# --description--
В останньому розділі ми розібрали, що таке стек і як можна його представити за допомогою масиву. У цьому розділі ми створимо власний клас Stack. Хоча його й можна створити за допомогою масивів, все ж іноді краще обмежити контроль, який властивий стекам. Окрім методів `push` та `pop`, стеки мають й інші корисні методи. Додаймо до нашого класу Stack такі методи: `peek`, `isEmpty` та `clear`.
# --instructions--
Напишіть метод `push`, який додає елемент на верхівку стека; метод `pop`, який видаляє та повертає елемент, що знаходиться у верхівці стека; метод `peek`, який переглядає верхній елемент у стеку; метод `isEmpty`, який перевіряє, чи стек порожній; метод `clear`, який видаляє всі елементи зі стека. Також ми додали допоміжний метод `print`, який виводить набір консолі. Щоправда, стеки цього методу зазвичай не мають.
# --hints--
Ваш клас `Stack` повинен містити метод `push`.
```js
assert(
(function () {
var test = new Stack();
return typeof test.push === 'function';
})()
);
```
Ваш клас `Stack` повинен містити метод `pop`.
```js
assert(
(function () {
var test = new Stack();
return typeof test.pop === 'function';
})()
);
```
Ваш клас `Stack` повинен містити метод `peek`.
```js
assert(
(function () {
var test = new Stack();
return typeof test.peek === 'function';
})()
);
```
Ваш клас `Stack` повинен містити метод `isEmpty`.
```js
assert(
(function () {
var test = new Stack();
return typeof test.isEmpty === 'function';
})()
);
```
Ваш клас `Stack` повинен містити метод `clear`.
```js
assert(
(function () {
var test = new Stack();
return typeof test.clear === 'function';
})()
);
```
Метод `peek` повинен повернути верхній елемент стека
```js
assert(
(function () {
var test = new Stack();
test.push('CS61');
test.push('CS50');
return test.peek() === 'CS50' && test.peek() === 'CS50';
})()
);
```
Метод `pop` повинен видалити та повернути верхній елемент стека
```js
assert(
(function () {
var test = new Stack();
test.push('CS61');
test.push('CS50');
return test.pop() === 'CS50' && test.pop() === 'CS61';
})()
);
```
Метод `isEmpty` повинен повернути true, якщо стек порожній
```js
assert(
(function () {
var test = new Stack();
return test.isEmpty();
})()
);
```
Метод `clear` повинен видалити всі елементи зі стека
```js
assert(
(function () {
var test = new Stack();
test.push('CS61');
test.push('CS50');
test.clear();
return test.isEmpty();
})()
);
```
# --seed--
## --seed-contents--
```js
function Stack() {
var collection = [];
this.print = function() {
console.log(collection);
};
// Only change code below this line
// Only change code above this line
}
```
# --solutions--
```js
class Stack {
constructor() {
this.collection = [];
}
print() {
console.log(this.collection);
}
push(val) {
this.collection.push(val);
}
pop() {
return this.collection.pop();
}
peek() {
return this.collection[this.collection.length - 1];
}
isEmpty() {
return this.collection.length === 0;
}
clear() {
return (this.collection.length = 0);
}
}
```