Skip to main content

Домашнее задание

  1. Разобрать код ниже для подготовки к следующий лекции
// Класс LinkedList - Базовый связный список, как основа для других списков
class LinkedList {
constructor() {
this.head = null; // Ссылка на первый элемент списка
}

// Метод добавления элемента в начало списка
addFirst(value) {
const newNode = new Node(value, this.head);
this.head = newNode;
}

// Метод для вывода всех элементов списка
print() {
let current = this.head;
while (current) {
console.log(current.value);
current = current.next;
}
}
}

// Вспомогательный класс Node
class Node {
constructor(value, next = null) {
this.value = value;
this.next = next;
}
}

// Односвязный список
class SinglyLinkedList extends LinkedList {
constructor() {
super();
}

// Добавление элемента в конец списка
addLast(value) {
const newNode = new Node(value);
if (!this.head) {
this.head = newNode;
return;
}
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}

// Двусвязный список
class DoublyLinkedList extends LinkedList {
constructor() {
super();
this.tail = null; // Ссылка на последний элемент списка
}

// Добавление элемента в начало списка
addFirst(value) {
const newNode = new DoublyNode(value, this.head, null);
if (this.head) {
this.head.prev = newNode;
}
this.head = newNode;
if (!this.tail) {
this.tail = newNode;
}
}

// Добавление элемента в конец списка
addLast(value) {
if (!this.tail) {
this.addFirst(value);
return;
}
const newNode = new DoublyNode(value, null, this.tail);
this.tail.next = newNode;
this.tail = newNode;
}

// Печать списка с конца в начало
printReverse() {
let current = this.tail;
while (current) {
console.log(current.value);
current = current.prev;
}
}
}

// Вспомогательный класс DoublyNode, расширяющий Node
class DoublyNode extends Node {
constructor(value, next, prev) {
super(value, next);
this.prev = prev;
}
}

const sList = new SinglyLinkedList();
sList.addFirst(1);
sList.addLast(2);
sList.print();

const dList = new DoublyLinkedList();
dList.addFirst(1);
dList.addLast(2);
dList.addLast(3);
dList.print();
dList.printReverse();
  1. Создать класс Bookshelf, который управляет коллекцией книг. Каждая книга должна быть представлена как экземпляр класса Book.

Требования -> Класс Book Конструктор должен принимать аргументы: title (название), author (автор) и year (год издания). Должен иметь метод getSummary(), который возвращает строку в формате: "title by author, published in year". -> Класс Bookshelf Конструктор не принимает аргументы и инициализирует пустой массив для хранения книг. Метод addBook(book) для добавления новой книги на полку. Метод findBooks(author) возвращает массив книг заданного автора. Метод listBooks() выводит список всех книг на полке в формате, указанном в getSummary() для каждой книги.

Показать подсказку
const myShelf = new Bookshelf();
myShelf.addBook(new Book('Harry Potter', 'J.K. Rowling', 1997));
myShelf.addBook(new Book('The Hobbit', 'J.R.R. Tolkien', 1937));
console.log(myShelf.listBooks());
console.log(myShelf.findBooks('J.R.R. Tolkien'));
  1. Разработать класс Stack для имитации работы стека, структуры данных, работающей по принципу "последний пришел — первый вышел" (LIFO, Last In First Out).

Требования Конструктор - Инициализирует новый экземпляр стека. Метод push(item) - Добавляет элемент item на вершину стека. Метод pop() - Удаляет верхний элемент из стека и возвращает его. Если стек пуст, должен возвращать null или выдавать ошибку. Метод peek() - Возвращает верхний элемент стека без его удаления. Если стек пуст, должен возвращать null. Метод isEmpty() - Возвращает true, если стек пуст, иначе false. Метод size() - Возвращает количество элементов в стеке.

Показать подсказку
//Пример
const stack = new Stack();
console.log(stack.isEmpty()); // true

stack.push(10);
stack.push(20);
stack.push(30);

console.log(stack.peek()); // 30
console.log(stack.pop()); // 30
console.log(stack.pop()); // 20
console.log(stack.size()); // 1
console.log(stack.isEmpty()); // false

Ответы на вопросы

Задача 2

class Book {
constructor(title, author, year) {
this.title = title; // Название книги
this.author = author; // Автор книги
this.year = year; // Год издания книги
}

getSummary() {
return `${this.title} by ${this.author}, published in ${this.year}`; // Возвращает строку с информацией о книге
}
}

// Класс Bookshelf
class Bookshelf {
constructor() {
this.books = []; // Инициализируем пустой массив для хранения книг
}

addBook(book) {
this.books.push(book); // Добавляем новую книгу на полку
}

findBooks(author) {
return this.books.filter(book => book.author === author); // Возвращаем массив книг заданного автора
}

listBooks() {
return this.books.map(book => book.getSummary()); // Выводим список всех книг на полке
}
}

Задача 3

class Stack {
constructor() {
this.items = []; // Инициализируем массив для хранения элементов стека
}

push(item) {
this.items.push(item); // Добавляем элемент на вершину стека
}

pop() {
if (this.isEmpty()) {
return null; // Возвращаем null, если стек пуст
}
return this.items.pop(); // Удаляем и возвращаем верхний элемент стека
}

peek() {
if (this.isEmpty()) {
return null; // Возвращаем null, если стек пуст
}
return this.items[this.items.length - 1]; // Возвращаем верхний элемент стека без его удаления
}

isEmpty() {
return this.items.length === 0; // Возвращаем true, если стек пуст, иначе false
}

size() {
return this.items.length; // Возвращаем количество элементов в стеке
}
}