This commit is contained in:
krahets
2026-03-29 05:06:58 +08:00
parent 37523d4ceb
commit 967293c421
51 changed files with 288 additions and 5073 deletions
+28 -52
View File
@@ -2025,54 +2025,36 @@ comments: true
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
# ## Узел двусвязного списка
### Узел двусвязного списка
class ListNode
attr_accessor :val
attr_accessor :next # Ссылка на узел-преемник
attr_accessor :prev # Ссылка на узел-предшественник
# ## Конструктор ###
### Конструктор ###
def initialize(val)
@val = val
end
end
=begin
File: linkedlist_deque.rb
Created Time: 2024-04-06
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
# ## Узел двусвязного списка
class ListNode
attr_accessor :val
attr_accessor :next # Ссылка на узел-преемник
attr_accessor :prev # Ссылка на узел-предшественник
# ## Конструктор ###
def initialize(val)
@val = val
end
end
# ## Двусторонняя очередь на основе двусвязного списка ###
### Двусторонняя очередь на основе двусвязного списка ###
class LinkedListDeque
# ## Получение длины двусторонней очереди ###
### Получение длины двусторонней очереди ###
attr_reader :size
# ## Конструктор ###
### Конструктор ###
def initialize
@front = nil # Головной узел front
@rear = nil # Хвостовой узел rear
@size = 0 # Длина двусторонней очереди
end
# ## Проверка, пуста ли двусторонняя очередь ###
### Проверка, пуста ли двусторонняя очередь ###
def is_empty?
size.zero?
end
# ## Операция добавления в очередь ###
### Операция добавления в очередь ###
def push(num, is_front)
node = ListNode.new(num)
# Если связный список пуст, пусть front и rear оба указывают на node
@@ -2094,17 +2076,17 @@ comments: true
@size += 1 # Обновить длину очереди
end
# ## Добавление в голову очереди ###
### Добавление в голову очереди ###
def push_first(num)
push(num, true)
end
# ## Добавление в хвост очереди ###
### Добавление в хвост очереди ###
def push_last(num)
push(num, false)
end
# ## Операция извлечения из очереди ###
### Операция извлечения из очереди ###
def pop(is_front)
raise IndexError, 'двусторонняя очередь пуста' if is_empty?
@@ -2134,31 +2116,31 @@ comments: true
val
end
# ## Извлечение из головы очереди ###
### Извлечение из головы очереди ###
def pop_first
pop(true)
end
# ## Извлечение из головы очереди ###
### Извлечение из головы очереди ###
def pop_last
pop(false)
end
# ## Доступ к элементу в начале очереди ###
### Доступ к элементу в начале очереди ###
def peek_first
raise IndexError, 'двусторонняя очередь пуста' if is_empty?
@front.val
end
# ## Доступ к элементу в хвосте очереди ###
### Доступ к элементу в хвосте очереди ###
def peek_last
raise IndexError, 'двусторонняя очередь пуста' if is_empty?
@rear.val
end
# ## Вернуть массив для вывода ###
### Вернуть массив для вывода ###
def to_array
node = @front
res = Array.new(size, 0)
@@ -3514,35 +3496,29 @@ comments: true
=== "Ruby"
```ruby title="array_deque.rb"
=begin
File: array_deque.rb
Created Time: 2024-04-05
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
# ## Двусторонняя очередь на основе кольцевого массива ###
### Двусторонняя очередь на основе кольцевого массива ###
class ArrayDeque
# ## Получение длины двусторонней очереди ###
### Получение длины двусторонней очереди ###
attr_reader :size
# ## Конструктор ###
### Конструктор ###
def initialize(capacity)
@nums = Array.new(capacity, 0)
@front = 0
@size = 0
end
# ## Получить вместимость двусторонней очереди ###
### Получить вместимость двусторонней очереди ###
def capacity
@nums.length
end
# ## Проверка, пуста ли двусторонняя очередь ###
### Проверка, пуста ли двусторонняя очередь ###
def is_empty?
size.zero?
end
# ## Добавление в голову очереди ###
### Добавление в голову очереди ###
def push_first(num)
if size == capacity
puts 'Двусторонняя очередь заполнена'
@@ -3557,7 +3533,7 @@ comments: true
@size += 1
end
# ## Добавление в хвост очереди ###
### Добавление в хвост очереди ###
def push_last(num)
if size == capacity
puts 'Двусторонняя очередь заполнена'
@@ -3571,7 +3547,7 @@ comments: true
@size += 1
end
# ## Извлечение из головы очереди ###
### Извлечение из головы очереди ###
def pop_first
num = peek_first
# Указатель головы сдвигается на одну позицию назад
@@ -3580,21 +3556,21 @@ comments: true
num
end
# ## Извлечение из хвоста очереди ###
### Извлечение из хвоста очереди ###
def pop_last
num = peek_last
@size -= 1
num
end
# ## Доступ к элементу в начале очереди ###
### Доступ к элементу в начале очереди ###
def peek_first
raise IndexError, 'двусторонняя очередь пуста' if is_empty?
@nums[@front]
end
# ## Доступ к элементу в хвосте очереди ###
### Доступ к элементу в хвосте очереди ###
def peek_last
raise IndexError, 'двусторонняя очередь пуста' if is_empty?
@@ -3603,7 +3579,7 @@ comments: true
@nums[last]
end
# ## Вернуть массив для вывода ###
### Вернуть массив для вывода ###
def to_array
# Преобразовывать только элементы списка в пределах фактической длины
res = []
@@ -3615,7 +3591,7 @@ comments: true
private
# ## Вычислить индекс в кольцевом массиве ###
### Вычислить индекс в кольцевом массиве ###
def index(i)
# С помощью операции взятия по модулю соединить начало и конец массива
# Когда i выходит за конец массива, он возвращается в начало
+17 -31
View File
@@ -1246,32 +1246,24 @@ comments: true
=== "Ruby"
```ruby title="linkedlist_queue.rb"
=begin
File: linkedlist_queue.rb
Created Time: 2024-04-06
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
require_relative '../utils/list_node'
# ## Очередь на основе связного списка ###
### Очередь на основе связного списка ###
class LinkedListQueue
# ## Получение длины очереди ###
### Получение длины очереди ###
attr_reader :size
# ## Конструктор ###
### Конструктор ###
def initialize
@front = nil # Головной узел front
@rear = nil # Хвостовой узел rear
@size = 0
end
# ## Проверка, пуста ли очередь ###
### Проверка, пуста ли очередь ###
def is_empty?
@front.nil?
end
# ## Добавление в очередь ###
### Добавление в очередь ###
def push(num)
# Добавить num после хвостового узла
node = ListNode.new(num)
@@ -1289,7 +1281,7 @@ comments: true
@size += 1
end
# ## Извлечение из очереди ###
### Извлечение из очереди ###
def pop
num = peek
# Удалить головной узел
@@ -1298,14 +1290,14 @@ comments: true
num
end
# ## Доступ к элементу в начале очереди ###
### Доступ к элементу в начале очереди ###
def peek
raise IndexError, 'очередь пуста' if is_empty?
@front.val
end
# ## Преобразовать связный список в Array и вернуть ###
### Преобразовать связный список в Array и вернуть ###
def to_array
queue = []
temp = @front
@@ -2228,35 +2220,29 @@ comments: true
=== "Ruby"
```ruby title="array_queue.rb"
=begin
File: array_queue.rb
Created Time: 2024-04-05
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
# ## Очередь на основе кольцевого массива ###
### Очередь на основе кольцевого массива ###
class ArrayQueue
# ## Получение длины очереди ###
### Получение длины очереди ###
attr_reader :size
# ## Конструктор ###
### Конструктор ###
def initialize(size)
@nums = Array.new(size, 0) # Массив для хранения элементов очереди
@front = 0 # Указатель head, указывающий на первый элемент очереди
@size = 0 # Длина очереди
end
# ## Получить вместимость очереди ###
### Получить вместимость очереди ###
def capacity
@nums.length
end
# ## Проверка, пуста ли очередь ###
### Проверка, пуста ли очередь ###
def is_empty?
size.zero?
end
# ## Добавление в очередь ###
### Добавление в очередь ###
def push(num)
raise IndexError, 'очередь заполнена' if size == capacity
@@ -2268,7 +2254,7 @@ comments: true
@size += 1
end
# ## Извлечение из очереди ###
### Извлечение из очереди ###
def pop
num = peek
# Указатель head сдвигается на одну позицию назад; если он выходит за конец, то возвращается в начало массива
@@ -2277,14 +2263,14 @@ comments: true
num
end
# ## Доступ к элементу в начале очереди ###
### Доступ к элементу в начале очереди ###
def peek
raise IndexError, 'очередь пуста' if is_empty?
@nums[@front]
end
# ## Вернуть список для вывода ###
### Вернуть список для вывода ###
def to_array
res = Array.new(size, 0)
j = @front
+15 -29
View File
@@ -1109,29 +1109,21 @@ comments: true
=== "Ruby"
```ruby title="linkedlist_stack.rb"
=begin
File: linkedlist_stack.rb
Created Time: 2024-04-06
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
require_relative '../utils/list_node'
# ## Стек на основе связного списка ###
### Стек на основе связного списка ###
class LinkedListStack
attr_reader :size
# ## Конструктор ###
### Конструктор ###
def initialize
@size = 0
end
# ## Проверка, пуст ли стек ###
### Проверка, пуст ли стек ###
def is_empty?
@peek.nil?
end
# ## Помещение в стек ###
### Помещение в стек ###
def push(val)
node = ListNode.new(val)
node.next = @peek
@@ -1139,7 +1131,7 @@ comments: true
@size += 1
end
# ## Извлечение из стека ###
### Извлечение из стека ###
def pop
num = peek
@peek = @peek.next
@@ -1147,14 +1139,14 @@ comments: true
num
end
# ## Доступ к верхнему элементу стека ###
### Доступ к верхнему элементу стека ###
def peek
raise IndexError, 'стек пуст' if is_empty?
@peek.val
end
# ## Преобразовать связный список в Array и вернуть ###
### Преобразовать связный список в Array и вернуть ###
def to_array
arr = []
node = @peek
@@ -1766,49 +1758,43 @@ comments: true
=== "Ruby"
```ruby title="array_stack.rb"
=begin
File: array_stack.rb
Created Time: 2024-04-06
Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end
# ## Стек на основе массива ###
### Стек на основе массива ###
class ArrayStack
# ## Конструктор ###
### Конструктор ###
def initialize
@stack = []
end
# ## Получить длину стека ###
### Получить длину стека ###
def size
@stack.length
end
# ## Проверка, пуст ли стек ###
### Проверка, пуст ли стек ###
def is_empty?
@stack.empty?
end
# ## Помещение в стек ###
### Помещение в стек ###
def push(item)
@stack << item
end
# ## Извлечение из стека ###
### Извлечение из стека ###
def pop
raise IndexError, 'стек пуст' if is_empty?
@stack.pop
end
# ## Доступ к верхнему элементу стека ###
### Доступ к верхнему элементу стека ###
def peek
raise IndexError, 'стек пуст' if is_empty?
@stack.last
end
# ## Вернуть список для вывода ###
### Вернуть список для вывода ###
def to_array
@stack
end