chore: update driver code (#1265)

pull/1262/head^2
khoaxuantu 7 months ago committed by GitHub
parent a3ee733e7b
commit 6404a53fc6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -76,32 +76,33 @@ end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化数组 # 初始化数组
arr = Array.new(5, 0) arr = Array.new(5, 0)
puts "数组 arr = #{arr}" puts "数组 arr = #{arr}"
nums = [1, 3, 2, 5, 4] nums = [1, 3, 2, 5, 4]
puts "数组 nums = #{nums}" puts "数组 nums = #{nums}"
# 随机访问 # 随机访问
random_num = random_access(nums) random_num = random_access(nums)
puts "在 nums 中获取随机元素 #{random_num}" puts "在 nums 中获取随机元素 #{random_num}"
# 长度扩展 # 长度扩展
nums = extend(nums, 3) nums = extend(nums, 3)
puts "将数组长度扩展至 8 ,得到 nums = #{nums}" puts "将数组长度扩展至 8 ,得到 nums = #{nums}"
# 插入元素 # 插入元素
insert(nums, 6, 3) insert(nums, 6, 3)
puts "在索引 3 处插入数字 6 ,得到 nums = #{nums}" puts "在索引 3 处插入数字 6 ,得到 nums = #{nums}"
# 删除元素 # 删除元素
remove(nums, 2) remove(nums, 2)
puts "删除索引 2 处的元素,得到 nums = #{nums}" puts "删除索引 2 处的元素,得到 nums = #{nums}"
# 遍历数组 # 遍历数组
traverse(nums) traverse(nums)
# 查找元素 # 查找元素
index = find(nums, 3) index = find(nums, 3)
puts "在 nums 中查找元素 3 ,得到索引 = #{index}" puts "在 nums 中查找元素 3 ,得到索引 = #{index}"
end

@ -48,35 +48,36 @@ def find(head, target)
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化链表
# 初始化各个节点
n0 = ListNode.new(1)
n1 = ListNode.new(3)
n2 = ListNode.new(2)
n3 = ListNode.new(5)
n4 = ListNode.new(4)
# 构建节点之间的引用
n0.next = n1
n1.next = n2
n2.next = n3
n3.next = n4
puts "初始化的链表为"
print_linked_list(n0)
# 初始化链表 # 插入节点
# 初始化各个节点 insert(n0, ListNode.new(0))
n0 = ListNode.new(1) print_linked_list n0
n1 = ListNode.new(3)
n2 = ListNode.new(2)
n3 = ListNode.new(5)
n4 = ListNode.new(4)
# 构建节点之间的引用
n0.next = n1
n1.next = n2
n2.next = n3
n3.next = n4
puts "初始化的链表为"
print_linked_list(n0)
# 插入节点
insert(n0, ListNode.new(0))
print_linked_list n0
# 删除节点 # 删除节点
remove(n0) remove(n0)
puts "删除节点后的链表为" puts "删除节点后的链表为"
print_linked_list(n0) print_linked_list(n0)
# 访问节点 # 访问节点
node = access(n0, 3) node = access(n0, 3)
puts "链表中索引 3 处的节点的值 = #{node.val}" puts "链表中索引 3 处的节点的值 = #{node.val}"
# 查找节点 # 查找节点
index = find(n0, 2) index = find(n0, 2)
puts "链表中值为 2 的节点的索引 = #{index}" puts "链表中值为 2 的节点的索引 = #{index}"
end

@ -5,55 +5,56 @@ Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end =end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化列表 # 初始化列表
nums = [1, 3, 2, 5, 4] nums = [1, 3, 2, 5, 4]
puts "列表 nums = #{nums}" puts "列表 nums = #{nums}"
# 访问元素 # 访问元素
num = nums[1] num = nums[1]
puts "访问索引 1 处的元素,得到 num = #{num}" puts "访问索引 1 处的元素,得到 num = #{num}"
# 更新元素 # 更新元素
nums[1] = 0 nums[1] = 0
puts "将索引 1 处的元素更新为 0 ,得到 nums = #{nums}" puts "将索引 1 处的元素更新为 0 ,得到 nums = #{nums}"
# 清空列表 # 清空列表
nums.clear nums.clear
puts "清空列表后 nums = #{nums}" puts "清空列表后 nums = #{nums}"
# 在尾部添加元素 # 在尾部添加元素
nums << 1 nums << 1
nums << 3 nums << 3
nums << 2 nums << 2
nums << 5 nums << 5
nums << 4 nums << 4
puts "添加元素后 nums = #{nums}" puts "添加元素后 nums = #{nums}"
# 在中间插入元素 # 在中间插入元素
nums.insert(3, 6) nums.insert(3, 6)
puts "在索引 3 处插入元素 6 ,得到 nums = #{nums}" puts "在索引 3 处插入元素 6 ,得到 nums = #{nums}"
# 删除元素 # 删除元素
nums.delete_at(3) nums.delete_at(3)
puts "删除索引 3 处的元素,得到 nums = #{nums}" puts "删除索引 3 处的元素,得到 nums = #{nums}"
# 通过索引遍历列表 # 通过索引遍历列表
count = 0 count = 0
for i in 0...nums.length for i in 0...nums.length
count += nums[i] count += nums[i]
end end
# 直接遍历列表元素 # 直接遍历列表元素
count = 0 count = 0
nums.each do |x| nums.each do |x|
count += x count += x
end
# 拼接两个列表
nums1 = [6, 8, 7, 10, 9]
nums += nums1
puts "将列表 nums1 拼接到 nums 之后,得到 nums = #{nums}"
nums = nums.sort { |a, b| a <=> b }
puts "排序列表后 nums = #{nums}"
end end
# 拼接两个列表
nums1 = [6, 8, 7, 10, 9]
nums += nums1
puts "将列表 nums1 拼接到 nums 之后,得到 nums = #{nums}"
nums = nums.sort { |a, b| a <=> b }
puts "排序列表后 nums = #{nums}"

@ -95,37 +95,38 @@ class MyList
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化列表 # 初始化列表
nums = MyList.new nums = MyList.new
# 在尾部添加元素 # 在尾部添加元素
nums.add(1) nums.add(1)
nums.add(3) nums.add(3)
nums.add(2) nums.add(2)
nums.add(5) nums.add(5)
nums.add(4) nums.add(4)
puts "列表 nums = #{nums.to_array} ,容量 = #{nums.capacity} ,长度 = #{nums.size}" puts "列表 nums = #{nums.to_array} ,容量 = #{nums.capacity} ,长度 = #{nums.size}"
# 在中间插入元素 # 在中间插入元素
nums.insert(3, 6) nums.insert(3, 6)
puts "在索引 3 处插入数字 6 ,得到 nums = #{nums.to_array}" puts "在索引 3 处插入数字 6 ,得到 nums = #{nums.to_array}"
# 删除元素 # 删除元素
nums.remove(3) nums.remove(3)
puts "删除索引 3 的元素,得到 nums = #{nums.to_array}" puts "删除索引 3 的元素,得到 nums = #{nums.to_array}"
# 访问元素 # 访问元素
num = nums.get(1) num = nums.get(1)
puts "访问索引 1 处的元素,得到 num = #{num}" puts "访问索引 1 处的元素,得到 num = #{num}"
# 更新元素 # 更新元素
nums.set(1, 0) nums.set(1, 0)
puts "将索引 1 处的元素更新为 0 ,得到 nums = #{nums.to_array}" puts "将索引 1 处的元素更新为 0 ,得到 nums = #{nums.to_array}"
# 测试扩容机制 # 测试扩容机制
for i in 0...10 for i in 0...10
# 在 i = 5 时,列表长度将超出列表容量,此时触发扩容机制 # 在 i = 5 时,列表长度将超出列表容量,此时触发扩容机制
nums.add(i) nums.add(i)
end
puts "扩容后的列表 nums = #{nums.to_array} ,容量 = #{nums.capacity} ,长度 = #{nums.size}"
end end
puts "扩容后的列表 nums = #{nums.to_array} ,容量 = #{nums.capacity} ,长度 = #{nums.size}"

@ -62,17 +62,18 @@ def nested_for_loop(n)
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
n = 5
n = 5 res = for_loop(n)
puts "\nfor 循环的求和结果 res = #{res}"
res = for_loop(n) res = while_loop(n)
puts "\nfor 循环的求和结果 res = #{res}" puts "\nwhile 循环的求和结果 res = #{res}"
res = while_loop(n) res = while_loop_ii(n)
puts "\nwhile 循环求和结果 res = #{res}" puts "\nwhile 循环(两次更新)求和结果 res = #{res}"
res = while_loop_ii(n) res = nested_for_loop(n)
puts "\nwhile 循环(两次更新)求和结果 res = #{res}" puts "\n双层 for 循环的遍历结果 #{res}"
end
res = nested_for_loop(n)
puts "\n双层 for 循环的遍历结果 #{res}"

@ -53,17 +53,18 @@ def fib(n)
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
n = 5
n = 5 res = recur(n)
puts "\n递归函数的求和结果 res = #{res}"
res = recur(n) res = for_loop_recur(n)
puts "\n递归函数的求和结果 res = #{res}" puts "\n使用迭代模拟递归求和结果 res = #{res}"
res = for_loop_recur(n) res = tail_recur(n, 0)
puts "\n使用迭代模拟递归求和结果 res = #{res}" puts "\n尾递归函数的求和结果 res = #{res}"
res = tail_recur(n, 0) res = fib(n)
puts "\n尾递归函数的求和结果 res = #{res}" puts "\n斐波那契数列的第 #{n} 项为 #{res}"
end
res = fib(n)
puts "\n斐波那契数列的第 #{n} 项为 #{res}"

@ -72,20 +72,21 @@ def build_tree(n)
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
n = 5
n = 5 # 常数阶
constant(n)
# 常数阶 # 线性阶
constant(n) linear(n)
linear_recur(n)
# 线性 # 平方
linear(n) quadratic(n)
linear_recur(n) quadratic_recur(n)
# 平方阶 # 指数阶
quadratic(n) root = build_tree(n)
quadratic_recur(n) print_tree(root)
end
# 指数阶
root = build_tree(n)
print_tree(root)

@ -128,37 +128,38 @@ def factorial_recur(n)
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 可以修改 n 运行,体会一下各种复杂度的操作数量变化趋势 # 可以修改 n 运行,体会一下各种复杂度的操作数量变化趋势
n = 8 n = 8
puts "输入数据大小 n = #{n}" puts "输入数据大小 n = #{n}"
count = constant(n) count = constant(n)
puts "常数阶的操作数量 = #{count}" puts "常数阶的操作数量 = #{count}"
count = linear(n) count = linear(n)
puts "线性阶的操作数量 = #{count}" puts "线性阶的操作数量 = #{count}"
count = array_traversal(Array.new(n, 0)) count = array_traversal(Array.new(n, 0))
puts "线性阶(遍历数组)的操作数量 = #{count}" puts "线性阶(遍历数组)的操作数量 = #{count}"
count = quadratic(n) count = quadratic(n)
puts "平方阶的操作数量 = #{count}" puts "平方阶的操作数量 = #{count}"
nums = Array.new(n) { |i| n - i } # [n, n-1, ..., 2, 1] nums = Array.new(n) { |i| n - i } # [n, n-1, ..., 2, 1]
count = bubble_sort(nums) count = bubble_sort(nums)
puts "平方阶(冒泡排序)的操作数量 = #{count}" puts "平方阶(冒泡排序)的操作数量 = #{count}"
count = exponential(n) count = exponential(n)
puts "指数阶(循环实现)的操作数量 = #{count}" puts "指数阶(循环实现)的操作数量 = #{count}"
count = exp_recur(n) count = exp_recur(n)
puts "指数阶(递归实现)的操作数量 = #{count}" puts "指数阶(递归实现)的操作数量 = #{count}"
count = logarithmic(n) count = logarithmic(n)
puts "对数阶(循环实现)的操作数量 = #{count}" puts "对数阶(循环实现)的操作数量 = #{count}"
count = log_recur(n) count = log_recur(n)
puts "对数阶(递归实现)的操作数量 = #{count}" puts "对数阶(递归实现)的操作数量 = #{count}"
count = linear_log_recur(n) count = linear_log_recur(n)
puts "线性对数阶(递归实现)的操作数量 = #{count}" puts "线性对数阶(递归实现)的操作数量 = #{count}"
count = factorial_recur(n) count = factorial_recur(n)
puts "阶乘阶(递归实现)的操作数量 = #{count}" puts "阶乘阶(递归实现)的操作数量 = #{count}"
end

@ -24,11 +24,12 @@ def find_one(nums)
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
for i in 0...10 for i in 0...10
n = 100 n = 100
nums = random_numbers(n) nums = random_numbers(n)
index = find_one(nums) index = find_one(nums)
puts "\n数组 [ 1, 2, ..., n ] 被打乱后 = #{nums}" puts "\n数组 [ 1, 2, ..., n ] 被打乱后 = #{nums}"
puts "数字 1 的索引为 #{index}" puts "数字 1 的索引为 #{index}"
end
end end

@ -109,36 +109,37 @@ class ArrayDeque
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化双向队列 # 初始化双向队列
deque = ArrayDeque.new(10) deque = ArrayDeque.new(10)
deque.push_last(3) deque.push_last(3)
deque.push_last(2) deque.push_last(2)
deque.push_last(5) deque.push_last(5)
puts "双向队列 deque = #{deque.to_array}" puts "双向队列 deque = #{deque.to_array}"
# 访问元素 # 访问元素
peek_first = deque.peek_first peek_first = deque.peek_first
puts "队首元素 peek_first = #{peek_first}" puts "队首元素 peek_first = #{peek_first}"
peek_last = deque.peek_last peek_last = deque.peek_last
puts "队尾元素 peek_last = #{peek_last}" puts "队尾元素 peek_last = #{peek_last}"
# 元素入队 # 元素入队
deque.push_last(4) deque.push_last(4)
puts "元素 4 队尾入队后 deque = #{deque.to_array}" puts "元素 4 队尾入队后 deque = #{deque.to_array}"
deque.push_first(1) deque.push_first(1)
puts "元素 1 队尾入队后 deque = #{deque.to_array}" puts "元素 1 队尾入队后 deque = #{deque.to_array}"
# 元素出队 # 元素出队
pop_last = deque.pop_last pop_last = deque.pop_last
puts "队尾出队元素 = #{pop_last},队尾出队后 deque = #{deque.to_array}" puts "队尾出队元素 = #{pop_last},队尾出队后 deque = #{deque.to_array}"
pop_first = deque.pop_first pop_first = deque.pop_first
puts "队尾出队元素 = #{pop_first},队尾出队后 deque = #{deque.to_array}" puts "队尾出队元素 = #{pop_first},队尾出队后 deque = #{deque.to_array}"
# 获取双向队列的长度 # 获取双向队列的长度
size = deque.size size = deque.size
puts "双向队列长度 size = #{size}" puts "双向队列长度 size = #{size}"
# 判断双向队列是否为空 # 判断双向队列是否为空
is_empty = deque.is_empty? is_empty = deque.is_empty?
puts "双向队列是否为空 = #{is_empty}" puts "双向队列是否为空 = #{is_empty}"
end

@ -69,38 +69,39 @@ class ArrayQueue
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化队列 # 初始化队列
queue = ArrayQueue.new(10) queue = ArrayQueue.new(10)
# 元素入队 # 元素入队
queue.push(1) queue.push(1)
queue.push(3) queue.push(3)
queue.push(2) queue.push(2)
queue.push(5) queue.push(5)
queue.push(4) queue.push(4)
puts "队列 queue = #{queue.to_array}" puts "队列 queue = #{queue.to_array}"
# 访问队首元素 # 访问队首元素
peek = queue.peek peek = queue.peek
puts "队首元素 peek = #{peek}" puts "队首元素 peek = #{peek}"
# 元素出队 # 元素出队
pop = queue.pop pop = queue.pop
puts "出队元素 pop = #{pop}" puts "出队元素 pop = #{pop}"
puts "出队后 queue = #{queue.to_array}" puts "出队后 queue = #{queue.to_array}"
# 获取队列的长度 # 获取队列的长度
size = queue.size size = queue.size
puts "队列长度 size = #{size}" puts "队列长度 size = #{size}"
# 判断队列是否为空 # 判断队列是否为空
is_empty = queue.is_empty? is_empty = queue.is_empty?
puts "队列是否为空 = #{is_empty}" puts "队列是否为空 = #{is_empty}"
# 测试环形数组 # 测试环形数组
for i in 0...10 for i in 0...10
queue.push(i) queue.push(i)
queue.pop queue.pop
puts "#{i} 轮入队 + 出队后 queue = #{queue.to_array}" puts "#{i} 轮入队 + 出队后 queue = #{queue.to_array}"
end
end end

@ -47,31 +47,32 @@ class ArrayStack
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化栈 # 初始化栈
stack = ArrayStack.new stack = ArrayStack.new
# 元素入栈 # 元素入栈
stack.push(1) stack.push(1)
stack.push(3) stack.push(3)
stack.push(2) stack.push(2)
stack.push(5) stack.push(5)
stack.push(4) stack.push(4)
puts "栈 stack = #{stack.to_array}" puts "栈 stack = #{stack.to_array}"
# 访问栈顶元素 # 访问栈顶元素
peek = stack.peek peek = stack.peek
puts "栈顶元素 peek = #{peek}" puts "栈顶元素 peek = #{peek}"
# 元素出栈 # 元素出栈
pop = stack.pop pop = stack.pop
puts "出栈元素 pop = #{pop}" puts "出栈元素 pop = #{pop}"
puts "出栈后 stack = #{stack.to_array}" puts "出栈后 stack = #{stack.to_array}"
# 获取栈的长度 # 获取栈的长度
size = stack.size size = stack.size
puts "栈的长度 size = #{size}" puts "栈的长度 size = #{size}"
# 判断是否为空 # 判断是否为空
is_empty = stack.is_empty? is_empty = stack.is_empty?
puts "栈是否为空 = #{is_empty}" puts "栈是否为空 = #{is_empty}"
end

@ -5,37 +5,38 @@ Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end =end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化双向队列
# Ruby 没有内直的双端队列,只能把 Array 当作双端队列来使用
deque = []
# 初始化双向队列 # 元素如队
# Ruby 没有内直的双端队列,只能把 Array 当作双端队列来使用 deque << 2
deque = [] deque << 5
deque << 4
# 请注意由于是数组Array#unshift 方法的时间复杂度为 O(n)
deque.unshift(3)
deque.unshift(1)
puts "双向队列 deque = #{deque}"
# 元素如队 # 访问元素
deque << 2 peek_first = deque.first
deque << 5 puts "队首元素 peek_first = #{peek_first}"
deque << 4 peek_last = deque.last
# 请注意由于是数组Array#unshift 方法的时间复杂度为 O(n) puts "队尾元素 peek_last = #{peek_last}"
deque.unshift(3)
deque.unshift(1)
puts "双向队列 deque = #{deque}"
# 访问元素 # 元素出队
peek_first = deque.first # 请注意,由于是数组, Array#shift 方法的时间复杂度为 O(n)
puts "队首元素 peek_first = #{peek_first}" pop_front = deque.shift
peek_last = deque.last puts "队首出队元素 pop_front = #{pop_front},队首出队后 deque = #{deque}"
puts "队尾元素 peek_last = #{peek_last}" pop_back = deque.pop
puts "队尾出队元素 pop_back = #{pop_back}, 队尾出队后 deque = #{deque}"
# 元素出队 # 获取双向队列的长度
# 请注意,由于是数组, Array#shift 方法的时间复杂度为 O(n) size = deque.length
pop_front = deque.shift puts "双向队列长度 size = #{size}"
puts "队首出队元素 pop_front = #{pop_front},队首出队后 deque = #{deque}"
pop_back = deque.pop
puts "队尾出队元素 pop_back = #{pop_back}, 队尾出队后 deque = #{deque}"
# 获取双向队列的长度 # 判断双向队列是否为空
size = deque.length is_empty = size.zero?
puts "双向队列长度 size = #{size}" puts "双向队列是否为空 = #{is_empty}"
end
# 判断双向队列是否为空
is_empty = size.zero?
puts "双向队列是否为空 = #{is_empty}"

@ -132,36 +132,37 @@ class LinkedListDeque
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化双向队列 # 初始化双向队列
deque = LinkedListDeque.new deque = LinkedListDeque.new
deque.push_last(3) deque.push_last(3)
deque.push_last(2) deque.push_last(2)
deque.push_last(5) deque.push_last(5)
puts "双向队列 deque = #{deque.to_array}" puts "双向队列 deque = #{deque.to_array}"
# 访问元素 # 访问元素
peek_first = deque.peek_first peek_first = deque.peek_first
puts "队首元素 peek_first = #{peek_first}" puts "队首元素 peek_first = #{peek_first}"
peek_last = deque.peek_last peek_last = deque.peek_last
puts "队首元素 peek_last = #{peek_last}" puts "队首元素 peek_last = #{peek_last}"
# 元素入队 # 元素入队
deque.push_last(4) deque.push_last(4)
puts "元素 4 队尾入队后 deque = #{deque.to_array}" puts "元素 4 队尾入队后 deque = #{deque.to_array}"
deque.push_first(1) deque.push_first(1)
puts "元素 1 队首入队后 deque = #{deque.to_array}" puts "元素 1 队首入队后 deque = #{deque.to_array}"
# 元素出队 # 元素出队
pop_last = deque.pop_last pop_last = deque.pop_last
puts "队尾出队元素 = #{pop_last}, 队尾出队后 deque = #{deque.to_array}" puts "队尾出队元素 = #{pop_last}, 队尾出队后 deque = #{deque.to_array}"
pop_first = deque.pop_first pop_first = deque.pop_first
puts "队首出队元素 = #{pop_first},队首出队后 deque = #{deque.to_array}" puts "队首出队元素 = #{pop_first},队首出队后 deque = #{deque.to_array}"
# 获取双向队列的长度 # 获取双向队列的长度
size = deque.size size = deque.size
puts "双向队列长度 size = #{size}" puts "双向队列长度 size = #{size}"
# 判断双向队列是否为空 # 判断双向队列是否为空
is_empty = deque.is_empty? is_empty = deque.is_empty?
puts "双向队列是否为空 = #{is_empty}" puts "双向队列是否为空 = #{is_empty}"
end

@ -70,31 +70,32 @@ class LinkedListQueue
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化队列 # 初始化队列
queue = LinkedListQueue.new queue = LinkedListQueue.new
# 元素如队 # 元素如队
queue.push(1) queue.push(1)
queue.push(3) queue.push(3)
queue.push(2) queue.push(2)
queue.push(5) queue.push(5)
queue.push(4) queue.push(4)
puts "队列 queue = #{queue.to_array}" puts "队列 queue = #{queue.to_array}"
# 访问队首元素 # 访问队首元素
peek = queue.peek peek = queue.peek
puts "队首元素 front = #{peek}" puts "队首元素 front = #{peek}"
# 元素出队 # 元素出队
pop_front = queue.pop pop_front = queue.pop
puts "出队元素 pop = #{pop_front}" puts "出队元素 pop = #{pop_front}"
puts "出队后 queue = #{queue.to_array}" puts "出队后 queue = #{queue.to_array}"
# 获取队列的长度 # 获取队列的长度
size = queue.size size = queue.size
puts "队列长度 size = #{size}" puts "队列长度 size = #{size}"
# 判断队列是否为空 # 判断队列是否为空
is_empty = queue.is_empty? is_empty = queue.is_empty?
puts "队列是否为空 = #{is_empty}" puts "队列是否为空 = #{is_empty}"
end

@ -56,31 +56,32 @@ class LinkedListStack
end end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化栈 # 初始化栈
stack = LinkedListStack.new stack = LinkedListStack.new
# 元素入栈 # 元素入栈
stack.push(1) stack.push(1)
stack.push(3) stack.push(3)
stack.push(2) stack.push(2)
stack.push(5) stack.push(5)
stack.push(4) stack.push(4)
puts "栈 stack = #{stack.to_array}" puts "栈 stack = #{stack.to_array}"
# 访问栈顶元素 # 访问栈顶元素
peek = stack.peek peek = stack.peek
puts "栈顶元素 peek = #{peek}" puts "栈顶元素 peek = #{peek}"
# 元素出栈 # 元素出栈
pop = stack.pop pop = stack.pop
puts "出栈元素 pop = #{pop}" puts "出栈元素 pop = #{pop}"
puts "出栈后 stack = #{stack.to_array}" puts "出栈后 stack = #{stack.to_array}"
# 获取栈的长度 # 获取栈的长度
size = stack.size size = stack.size
puts "栈的长度 size = #{size}" puts "栈的长度 size = #{size}"
# 判断是否为空 # 判断是否为空
is_empty = stack.is_empty? is_empty = stack.is_empty?
puts "栈是否为空 = #{is_empty}" puts "栈是否为空 = #{is_empty}"
end

@ -5,33 +5,34 @@ Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end =end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化队列
# Ruby 内置的队列Thread::Queue) 没有 peek 和遍历方法,可以把 Array 当作队列来使用
queue = []
# 初始化队列 # 元素入队
# Ruby 内置的队列Thread::Queue) 没有 peek 和遍历方法,可以把 Array 当作队列来使用 queue.push(1)
queue = [] queue.push(3)
queue.push(2)
queue.push(5)
queue.push(4)
puts "队列 queue = #{queue}"
# 元素入队 # 访问队列元素
queue.push(1) peek = queue.first
queue.push(3) puts "队首元素 peek = #{peek}"
queue.push(2)
queue.push(5)
queue.push(4)
puts "队列 queue = #{queue}"
# 访问队列元素 # 元素出队
peek = queue.first # 清注意由于是数组Array#shift 方法时间复杂度为 O(n)
puts "队首元素 peek = #{peek}" pop = queue.shift
puts "出队元素 pop = #{pop}"
puts "出队后 queue = #{queue}"
# 元素出队 # 获取队列的长度
# 清注意由于是数组Array#shift 方法时间复杂度为 O(n) size = queue.length
pop = queue.shift puts "队列长度 size = #{size}"
puts "出队元素 pop = #{pop}"
puts "出队后 queue = #{queue}"
# 获取队列的长度 # 判断队列是否为空
size = queue.length is_empty = queue.empty?
puts "队列长度 size = #{size}" puts "队列是否为空 = #{is_empty}"
end
# 判断队列是否为空
is_empty = queue.empty?
puts "队列是否为空 = #{is_empty}"

@ -5,32 +5,33 @@ Author: Xuan Khoa Tu Nguyen (ngxktuzkai2000@gmail.com)
=end =end
### Driver Code ### ### Driver Code ###
if __FILE__ == $0
# 初始化栈
# Ruby 没有内置的栈类,可以把 Array 当作栈来使用
stack = []
# 初始化栈 # 元素入栈
# Ruby 没有内置的栈类,可以把 Array 当作栈来使用 stack << 1
stack = [] stack << 3
stack << 2
stack << 5
stack << 4
puts "栈 stack = #{stack}"
# 元素入栈 # 访问栈顶元素
stack << 1 peek = stack.last
stack << 3 puts "栈顶元素 peek = #{peek}"
stack << 2
stack << 5
stack << 4
puts "栈 stack = #{stack}"
# 访问栈顶元素 # 元素出栈
peek = stack.last pop = stack.pop
puts "栈顶元素 peek = #{peek}" puts "出栈元素 pop = #{pop}"
puts "出栈后 stack = #{stack}"
# 元素出栈 # 获取栈的长度
pop = stack.pop size = stack.length
puts "出栈元素 pop = #{pop}" puts "栈的长度 size = #{size}"
puts "出栈后 stack = #{stack}"
# 获取栈的长度 # 判断是否为空
size = stack.length is_empty = stack.empty?
puts "栈的长度 size = #{size}" puts "栈是否为空 = #{is_empty}"
end
# 判断是否为空
is_empty = stack.empty?
puts "栈是否为空 = #{is_empty}"

Loading…
Cancel
Save