175 lines
4.0 KiB
Markdown
175 lines
4.0 KiB
Markdown
---
|
|
id: 587d8250367417b2b2512c60
|
|
title: キュークラスを作成する
|
|
challengeType: 1
|
|
forumTopicId: 301631
|
|
dashedName: create-a-queue-class
|
|
---
|
|
|
|
# --description--
|
|
|
|
スタックと同様に、キューは要素の集まりです。 しかしスタックとは異なり、キューは FIFO (先入れ先出し) の原則に従います。 キューに追加された要素はキューのテール (末尾) にプッシュされ、取り除くことができる要素はキューの先頭にある要素だけです。
|
|
|
|
キューは配列を使用して表すことができますが、スタックと同じように、ここではキューに対する制御量を制限したいのです。
|
|
|
|
キュークラスの 2 つの主なメソッドは enqueue と dequeue です。 enqueue メソッドは要素をキューの末尾にプッシュし、dequeue メソッドはキューの先頭にある要素を削除して返します。 他の便利なメソッドとしては front、size、isEmpty があります。
|
|
|
|
# --instructions--
|
|
|
|
要素をキューの末尾にプッシュする `enqueue` メソッド、先頭の要素を削除して返す `dequeue` メソッド、先頭の要素を確認するための `front` メソッド、長さを示す `size` メソッド、および、キューが空かどうかを調べる `isEmpty` メソッドを記述してください。
|
|
|
|
# --hints--
|
|
|
|
`Queue` クラスに `enqueue` メソッドが必要です。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
return typeof test.enqueue === 'function';
|
|
})()
|
|
);
|
|
```
|
|
|
|
`Queue` クラスに `dequeue` メソッドが必要です。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
return typeof test.dequeue === 'function';
|
|
})()
|
|
);
|
|
```
|
|
|
|
`Queue` クラスに `front` メソッドが必要です。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
return typeof test.front === 'function';
|
|
})()
|
|
);
|
|
```
|
|
|
|
`Queue` クラスに `size` メソッドが必要です。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
return typeof test.size === 'function';
|
|
})()
|
|
);
|
|
```
|
|
|
|
`Queue` クラスに `isEmpty` メソッドが必要です。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
return typeof test.isEmpty === 'function';
|
|
})()
|
|
);
|
|
```
|
|
|
|
`dequeue` メソッドはキューの先頭の要素を削除して返す必要があります。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
test.enqueue('Smith');
|
|
test.enqueue('John');
|
|
return test.dequeue() === 'Smith';
|
|
})()
|
|
);
|
|
```
|
|
|
|
`front` メソッドはキューの先頭の要素の値を返す必要があります。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
test.enqueue('Smith');
|
|
test.enqueue('John');
|
|
return test.front() === 'Smith';
|
|
})()
|
|
);
|
|
```
|
|
|
|
`size` メソッドはキューの長さを返す必要があります。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
test.enqueue('Smith');
|
|
return test.size() === 1;
|
|
})()
|
|
);
|
|
```
|
|
|
|
`isEmpty` メソッドは、キュー内に要素がある場合に `false` を返す必要があります。
|
|
|
|
```js
|
|
assert(
|
|
(function () {
|
|
var test = new Queue();
|
|
test.enqueue('Smith');
|
|
return !test.isEmpty();
|
|
})()
|
|
);
|
|
```
|
|
|
|
# --seed--
|
|
|
|
## --seed-contents--
|
|
|
|
```js
|
|
function Queue() {
|
|
var collection = [];
|
|
this.print = function() {
|
|
console.log(collection);
|
|
};
|
|
// Only change code below this line
|
|
|
|
// Only change code above this line
|
|
}
|
|
```
|
|
|
|
# --solutions--
|
|
|
|
```js
|
|
function Queue () {
|
|
var collection = [];
|
|
this.print = function() {
|
|
console.log(collection);
|
|
};
|
|
// Only change code below this line
|
|
this.enqueue = function(item) {
|
|
collection.push(item);
|
|
}
|
|
|
|
this.dequeue = function() {
|
|
return collection.shift();
|
|
}
|
|
|
|
this.front = function() {
|
|
return collection[0];
|
|
}
|
|
|
|
this.size = function(){
|
|
return collection.length;
|
|
}
|
|
|
|
this.isEmpty = function() {
|
|
return collection.length === 0 ? true : false;
|
|
}
|
|
// Only change code above this line
|
|
}
|
|
```
|