Домашнее задание
- Разобрать код ниже для подготовки к следующий лекции
// Класс 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();
- Создать класс Bookshelf, который управляет коллекцией книг. Каждая книга должна быть представлена как экземпляр класса Book.
Требования -> Класс Book Конструктор должен принимать аргументы: title (название), author (автор) и year (год издания). Должен иметь метод getSummary(), который возвращает строку в формате: "title by author, published in year". -> Класс Bookshelf Конструктор не принимает аргументы и инициализирует пустой массив для хранения книг. Метод addBook(book) для добавления новой книги на полку. Метод findBooks(author) возвращает массив книг заданного автора. Метод listBooks() выводит список всех книг на полке в формате, указанном в getSummary() для каждой книги.
Показать подсказку
- Разработать класс Stack для имитации работы стека, структуры данных, работающей по принципу "последний пришел — первый вышел" (LIFO, Last In First Out).
Требования Конструктор - Инициализирует новый экземпляр стека. Метод push(item) - Добавляет элемент item на вершину стека. Метод pop() - Удаляет верхний элемент из стека и возвращает его. Если стек пуст, должен возвращать null или выдавать ошибку. Метод peek() - Возвращает верхний элемент стека без его удаления. Если стек пуст, должен возвращать null. Метод isEmpty() - Возвращает true, если стек пуст, иначе false. Метод size() - Возвращает количество элементов в стеке.