@@ -3436,7 +3436,7 @@
<!-- Page content -->
< h1 id = "53" > 5.3 双向队列< a class = "headerlink" href = "#53" title = "Permanent link" > ¶ < / a > < / h1 >
< p > 在队列中,我们仅能在头部 删除或在尾部添加元素。如图 5-7 所示,「双向队列 double-ended queue」提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。< / p >
< p > 在队列中,我们仅能删除头部元素 或在尾部添加元素。如图 5-7 所示,「双向队列 double-ended queue」提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。< / p >
< p > < a class = "glightbox" href = "../deque.assets/deque_operations.png" data-type = "image" data-width = "100%" data-height = "auto" data-desc-position = "bottom" > < img alt = "双向队列的操作" class = "animation-figure" src = "../deque.assets/deque_operations.png" / > < / a > < / p >
< p align = "center" > 图 5-7 双向队列的操作 < / p >
@@ -3487,33 +3487,35 @@
< / tbody >
< / table >
< / div >
< p > 同样地,我们可以直接使用编程语言中已实现的双向队列类。 < / p >
< p > 同样地,我们可以直接使用编程语言中已实现的双向队列类: < / p >
< div class = "tabbed-set tabbed-alternate" data-tabs = "1:12" > < input checked = "checked" id = "__tabbed_1_1" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_2" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_3" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_4" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_5" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_6" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_7" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_8" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_9" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_10" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_11" name = "__tabbed_1" type = "radio" / > < input id = "__tabbed_1_12" name = "__tabbed_1" type = "radio" / > < div class = "tabbed-labels" > < label for = "__tabbed_1_1" > Python< / label > < label for = "__tabbed_1_2" > C++< / label > < label for = "__tabbed_1_3" > Java< / label > < label for = "__tabbed_1_4" > C#< / label > < label for = "__tabbed_1_5" > Go< / label > < label for = "__tabbed_1_6" > Swift< / label > < label for = "__tabbed_1_7" > JS< / label > < label for = "__tabbed_1_8" > TS< / label > < label for = "__tabbed_1_9" > Dart< / label > < label for = "__tabbed_1_10" > Rust< / label > < label for = "__tabbed_1_11" > C< / label > < label for = "__tabbed_1_12" > Zig< / label > < / div >
< div class = "tabbed-content" >
< div class = "tabbed-block" >
< div class = "highlight" > < span class = "filename" > deque.py< / span > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "c1" > # 初始化双向队列 < / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > deque < / span > < span class = "p" > : < / span > < span class = "n" > deque < / span > < span class = "p" > [ < / span > < span class = "nb" > int < / span > < span class = "p" > ] < / span > < span class = "o" > = < / span > < span class = "n" > collections < / span > < span class = "o" > . < / span > < span class = "n" > deque < / span > < span class = "p" > () < / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "c1" > # 元素入队 < / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > deque < / span > < span class = "o" > . < / span > < span class = "n" > append < / span > < span class = "p" > ( < / span > < span class = "mi" > 2 < / span > < span class = "p" > ) < / span > < span class = "c1" > # 添加至队尾 < / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n " > deque < / span > < span class = "o" > . < / span > < span class = "n" > append < / span > < span class = "p" > ( < / span > < span class = "mi" > 5 < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "n" > deque< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "mi" > 4 < / span > < span class = "p" > )< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "n" > deque< / span > < span class = "o" > .< / span > < span class = "n" > appendleft < / span > < span class = "p" > (< / span > < span class = "mi" > 3 < / span > < span class = "p" > )< / span > < span class = "c1" > # 添加至队首 < / span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" > < / a > < span class = "n" > deque< / span > < span class = "o" > .< / span > < span class = "n" > appendleft < / span > < span class = "p" > (< / span > < span class = "mi" > 1 < / span > < span class = "p" > )< / span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" > < / a >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" > < / a > < span class = "c1" > # 访问元素 < / span >
< a id = "__codelineno-0-12" name = "__codelineno-0-12" href = "#__codelineno-0-12" > < / a > < span class = "n" > front < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > ] < / span > < span class = "c1" > # 队首元素 < / span >
< a id = "__codelineno-0-13" name = "__codelineno-0-13" href = "#__codelineno-0-13" > < / a > < span class = "n" > rear < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "mi" > 1 < / span > < span class = "p" > ] < / span > < span class = " c1"> # 队尾 元素< / span >
< a id = "__codelineno-0-14" name = "__codelineno-0-14" href = "#__codelineno-0-14" > < / a >
< a id = "__codelineno-0-15" name = "__codelineno-0-15" href = "#__codelineno-0-15" > < / a > < span class = "c1" > # 元素出队 < / span >
< a id = "__codelineno-0-16" name = "__codelineno-0-16" href = "#__codelineno-0-16" > < / a > < span class = "n" > pop_front < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "o" > . < / span > < span class = "n" > popleft < / span > < span class = "p" > () < / span > < span class = "c1" > # 队首元素出队 < / span >
< a id = "__codelineno-0-17" name = "__codelineno-0-17" href = "#__codelineno-0-17" > < / a > < span class = "n" > pop_rear < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "o" > . < / span > < span class = "n" > pop < / span > < span class = "p" > () < / span > < span class = " c1"> # 队尾 元素出队< / span >
< a id = "__codelineno-0-18" name = "__codelineno-0-18" href = "#__codelineno-0-18" > < / a >
< a id = "__codelineno-0-19" name = "__codelineno-0-19" href = "#__codelineno-0-19" > < / a > < span class = "c1" > # 获取双向队列的长度 < / span >
< a id = "__codelineno-0-20" name = "__codelineno-0-20" href = "#__codelineno-0-20" > < / a > < span class = "n" > size < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "nb" > len < / span > < span class = "p" > ( < / span > < span class = "n" > deque < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-0-21" name = "__codelineno-0-21" href = "#__codelineno-0-21" > < / a >
< a id = "__codelineno-0-22" name = "__codelineno-0-22" href = "#__codelineno-0-22" > < / a > < span class = "c1" > # 判断双向队列是否为空 < / span >
< a id = "__codelineno-0-23" name = "__codelineno-0-23" href = "#__codelineno-0-23" > < / a > < span class = "n" > is_empty < / span > < span class = "p" > : < / span > < span class = "nb" > bool < / span > < span class = "o" > = < / span > < span class = "nb" > len < / span > < span class = "p" > ( < / span > < span class = "n" > deque < / span > < span class = "p" > ) < / span > < span class = "o" > == < / span > < span class = "mi" > 0 < / span >
< div class = "highlight" > < span class = "filename" > deque.py< / span > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "kn" > from < / span > < span class = "nn" > collections < / span > < span class = "kn" > import < / span > < span class = "n" > deque < / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "c1" > # 初始化双向队列 < / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > deque < / span > < span class = "p" > : < / span > < span class = "n" > deque < / span > < span class = "p" > [ < / span > < span class = "nb" > int < / span > < span class = "p" > ] < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "p" > () < / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "c1 " > # 元素入队 < / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "n" > deque< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "mi" > 2 < / span > < span class = "p" > )< / span > < span class = "c1" > # 添加至队尾 < / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "n" > deque< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "mi" > 5 < / span > < span class = "p" > )< / span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" > < / a > < span class = "n" > deque< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "mi" > 4 < / span > < span class = "p" > )< / span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" > < / a > < span class = "n" > deque < / span > < span class = "o" > . < / span > < span class = "n" > appendleft < / span > < span class = "p" > ( < / span > < span class = "mi" > 3 < / span > < span class = "p" > ) < / span > < span class = "c1" > # 添加至队首 < / span >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" > < / a > < span class = "n" > deque < / span > < span class = "o" > . < / span > < span class = "n" > appendleft < / span > < span class = "p" > ( < / span > < span class = "mi" > 1 < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-0-12" name = "__codelineno-0-12" href = "#__codelineno-0-12" > < / a >
< a id = "__codelineno-0-13" name = "__codelineno-0-13" href = "#__codelineno-0-13" > < / a > < span class = "c1" > # 访问 元素< / span >
< a id = "__codelineno-0-14" name = "__codelineno-0-14" href = "#__codelineno-0-14" > < / a > < span class = "n" > front < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "p" > [ < / span > < span class = "mi" > 0 < / span > < span class = "p" > ] < / span > < span class = "c1" > # 队首元素 < / span >
< a id = "__codelineno-0-15" name = "__codelineno-0-15" href = "#__codelineno-0-15" > < / a > < span class = "n" > rear < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "p" > [ < / span > < span class = "o" > - < / span > < span class = "mi" > 1 < / span > < span class = "p" > ] < / span > < span class = " c1"> # 队尾 元素< / span >
< a id = "__codelineno-0-16" name = "__codelineno-0-16" href = "#__codelineno-0-16" > < / a >
< a id = "__codelineno-0-17" name = "__codelineno-0-17" href = "#__codelineno-0-17" > < / a > < span class = "c1" > # 元素出队< / span >
< a id = "__codelineno-0-18" name = "__codelineno-0-18" href = "#__codelineno-0-18" > < / a > < span class = "n" > pop_front < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "o" > . < / span > < span class = "n" > popleft < / span > < span class = "p" > () < / span > < span class = "c1" > # 队首元素出队 < / span >
< a id = "__codelineno-0-19" name = "__codelineno-0-19" href = "#__codelineno-0-19" > < / a > < span class = "n" > pop_rear < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "n" > deque < / span > < span class = "o" > . < / span > < span class = "n" > pop < / span > < span class = "p" > () < / span > < span class = " c1"> # 队尾元素出队 < / span >
< a id = "__codelineno-0-20" name = "__codelineno-0-20" href = "#__codelineno-0-20" > < / a >
< a id = "__codelineno-0-21" name = "__codelineno-0-21" href = "#__codelineno-0-21" > < / a > < span class = "c1" > # 获取双向队列的长度 < / span >
< a id = "__codelineno-0-22" name = "__codelineno-0-22" href = "#__codelineno-0-22" > < / a > < span class = "n" > size < / span > < span class = "p" > : < / span > < span class = "nb" > int < / span > < span class = "o" > = < / span > < span class = "nb" > len < / span > < span class = "p" > ( < / span > < span class = "n" > deque < / span > < span class = "p" > ) < / span >
< a id = "__codelineno-0-23" name = "__codelineno-0-23" href = "#__codelineno-0-23" > < / a >
< a id = "__codelineno-0-24" name = "__codelineno-0-24" href = "#__codelineno-0-24" > < / a > < span class = "c1" > # 判断双向队列是否为空< / span >
< a id = "__codelineno-0-25" name = "__codelineno-0-25" href = "#__codelineno-0-25" > < / a > < span class = "n" > is_empty< / span > < span class = "p" > :< / span > < span class = "nb" > bool< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > deque< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "mi" > 0< / span >
< / code > < / pre > < / div >
< / div >
< div class = "tabbed-block" >
@@ -3816,7 +3818,7 @@
< / div >
< p align = "center" > 图 5-8 基于链表实现双向队列的入队出队操作 < / p >
< p > 实现代码如下所示。 < / p >
< p > 实现代码如下所示: < / p >
< div class = "tabbed-set tabbed-alternate" data-tabs = "3:12" > < input checked = "checked" id = "__tabbed_3_1" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_2" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_3" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_4" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_5" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_6" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_7" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_8" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_9" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_10" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_11" name = "__tabbed_3" type = "radio" / > < input id = "__tabbed_3_12" name = "__tabbed_3" type = "radio" / > < div class = "tabbed-labels" > < label for = "__tabbed_3_1" > Python< / label > < label for = "__tabbed_3_2" > C++< / label > < label for = "__tabbed_3_3" > Java< / label > < label for = "__tabbed_3_4" > C#< / label > < label for = "__tabbed_3_5" > Go< / label > < label for = "__tabbed_3_6" > Swift< / label > < label for = "__tabbed_3_7" > JS< / label > < label for = "__tabbed_3_8" > TS< / label > < label for = "__tabbed_3_9" > Dart< / label > < label for = "__tabbed_3_10" > Rust< / label > < label for = "__tabbed_3_11" > C< / label > < label for = "__tabbed_3_12" > Zig< / label > < / div >
< div class = "tabbed-content" >
< div class = "tabbed-block" >
@@ -3849,7 +3851,7 @@
< a id = "__codelineno-12-27" name = "__codelineno-12-27" href = "#__codelineno-12-27" > < / a > < span class = "k" > def< / span > < span class = "nf" > push< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > num< / span > < span class = "p" > :< / span > < span class = "nb" > int< / span > < span class = "p" > ,< / span > < span class = "n" > is_front< / span > < span class = "p" > :< / span > < span class = "nb" > bool< / span > < span class = "p" > ):< / span >
< a id = "__codelineno-12-28" name = "__codelineno-12-28" href = "#__codelineno-12-28" > < / a > < span class = "w" > < / span > < span class = "sd" > " " " 入队操作" " " < / span >
< a id = "__codelineno-12-29" name = "__codelineno-12-29" href = "#__codelineno-12-29" > < / a > < span class = "n" > node< / span > < span class = "o" > =< / span > < span class = "n" > ListNode< / span > < span class = "p" > (< / span > < span class = "n" > num< / span > < span class = "p" > )< / span >
< a id = "__codelineno-12-30" name = "__codelineno-12-30" href = "#__codelineno-12-30" > < / a > < span class = "c1" > # 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-12-30" name = "__codelineno-12-30" href = "#__codelineno-12-30" > < / a > < span class = "c1" > # 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-12-31" name = "__codelineno-12-31" href = "#__codelineno-12-31" > < / a > < span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > is_empty< / span > < span class = "p" > ():< / span >
< a id = "__codelineno-12-32" name = "__codelineno-12-32" href = "#__codelineno-12-32" > < / a > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _front< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _rear< / span > < span class = "o" > =< / span > < span class = "n" > node< / span >
< a id = "__codelineno-12-33" name = "__codelineno-12-33" href = "#__codelineno-12-33" > < / a > < span class = "c1" > # 队首入队操作< / span >
@@ -3974,7 +3976,7 @@
< a id = "__codelineno-13-42" name = "__codelineno-13-42" href = "#__codelineno-13-42" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 入队操作 */< / span >
< a id = "__codelineno-13-43" name = "__codelineno-13-43" href = "#__codelineno-13-43" > < / a > < span class = "w" > < / span > < span class = "kt" > void< / span > < span class = "w" > < / span > < span class = "n" > push< / span > < span class = "p" > (< / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "n" > num< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "kt" > bool< / span > < span class = "w" > < / span > < span class = "n" > isFront< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-13-44" name = "__codelineno-13-44" href = "#__codelineno-13-44" > < / a > < span class = "w" > < / span > < span class = "n" > DoublyListNode< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "n" > node< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "k" > new< / span > < span class = "w" > < / span > < span class = "n" > DoublyListNode< / span > < span class = "p" > (< / span > < span class = "n" > num< / span > < span class = "p" > );< / span >
< a id = "__codelineno-13-45" name = "__codelineno-13-45" href = "#__codelineno-13-45" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-13-45" name = "__codelineno-13-45" href = "#__codelineno-13-45" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-13-46" name = "__codelineno-13-46" href = "#__codelineno-13-46" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > isEmpty< / span > < span class = "p" > ())< / span >
< a id = "__codelineno-13-47" name = "__codelineno-13-47" href = "#__codelineno-13-47" > < / a > < span class = "w" > < / span > < span class = "n" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-13-48" name = "__codelineno-13-48" href = "#__codelineno-13-48" > < / a > < span class = "w" > < / span > < span class = "c1" > // 队首入队操作< / span >
@@ -4107,7 +4109,7 @@
< a id = "__codelineno-14-32" name = "__codelineno-14-32" href = "#__codelineno-14-32" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 入队操作 */< / span >
< a id = "__codelineno-14-33" name = "__codelineno-14-33" href = "#__codelineno-14-33" > < / a > < span class = "w" > < / span > < span class = "kd" > private< / span > < span class = "w" > < / span > < span class = "kt" > void< / span > < span class = "w" > < / span > < span class = "nf" > push< / span > < span class = "p" > (< / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "n" > num< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "kt" > boolean< / span > < span class = "w" > < / span > < span class = "n" > isFront< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-14-34" name = "__codelineno-14-34" href = "#__codelineno-14-34" > < / a > < span class = "w" > < / span > < span class = "n" > ListNode< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "k" > new< / span > < span class = "w" > < / span > < span class = "n" > ListNode< / span > < span class = "p" > (< / span > < span class = "n" > num< / span > < span class = "p" > );< / span >
< a id = "__codelineno-14-35" name = "__codelineno-14-35" href = "#__codelineno-14-35" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-14-35" name = "__codelineno-14-35" href = "#__codelineno-14-35" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-14-36" name = "__codelineno-14-36" href = "#__codelineno-14-36" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > isEmpty< / span > < span class = "p" > ())< / span >
< a id = "__codelineno-14-37" name = "__codelineno-14-37" href = "#__codelineno-14-37" > < / a > < span class = "w" > < / span > < span class = "n" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-14-38" name = "__codelineno-14-38" href = "#__codelineno-14-38" > < / a > < span class = "w" > < / span > < span class = "c1" > // 队首入队操作< / span >
@@ -4234,7 +4236,7 @@
< a id = "__codelineno-15-28" name = "__codelineno-15-28" href = "#__codelineno-15-28" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 入队操作 */< / span >
< a id = "__codelineno-15-29" name = "__codelineno-15-29" href = "#__codelineno-15-29" > < / a > < span class = "w" > < / span > < span class = "k" > void< / span > < span class = "w" > < / span > < span class = "nf" > Push< / span > < span class = "p" > (< / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "n" > num< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "kt" > bool< / span > < span class = "w" > < / span > < span class = "n" > isFront< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-15-30" name = "__codelineno-15-30" href = "#__codelineno-15-30" > < / a > < span class = "w" > < / span > < span class = "n" > ListNode< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "k" > new< / span > < span class = "p" > (< / span > < span class = "n" > num< / span > < span class = "p" > );< / span >
< a id = "__codelineno-15-31" name = "__codelineno-15-31" href = "#__codelineno-15-31" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-15-31" name = "__codelineno-15-31" href = "#__codelineno-15-31" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-15-32" name = "__codelineno-15-32" href = "#__codelineno-15-32" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > IsEmpty< / span > < span class = "p" > ())< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-15-33" name = "__codelineno-15-33" href = "#__codelineno-15-33" > < / a > < span class = "w" > < / span > < span class = "n" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-15-34" name = "__codelineno-15-34" href = "#__codelineno-15-34" > < / a > < span class = "w" > < / span > < span class = "n" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > ;< / span >
@@ -4450,7 +4452,7 @@
< a id = "__codelineno-17-32" name = "__codelineno-17-32" href = "#__codelineno-17-32" > < / a > < span class = "cm" > /* 入队操作 */< / span >
< a id = "__codelineno-17-33" name = "__codelineno-17-33" href = "#__codelineno-17-33" > < / a > < span class = "kd" > private< / span > < span class = "kd" > func< / span > < span class = "nf" > push< / span > < span class = "p" > (< / span > < span class = "n" > num< / span > < span class = "p" > :< / span > < span class = "nb" > Int< / span > < span class = "p" > ,< / span > < span class = "n" > isFront< / span > < span class = "p" > :< / span > < span class = "nb" > Bool< / span > < span class = "p" > )< / span > < span class = "p" > {< / span >
< a id = "__codelineno-17-34" name = "__codelineno-17-34" href = "#__codelineno-17-34" > < / a > < span class = "kd" > let< / span > < span class = "nv" > node< / span > < span class = "p" > =< / span > < span class = "n" > ListNode< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > :< / span > < span class = "n" > num< / span > < span class = "p" > )< / span >
< a id = "__codelineno-17-35" name = "__codelineno-17-35" href = "#__codelineno-17-35" > < / a > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-17-35" name = "__codelineno-17-35" href = "#__codelineno-17-35" > < / a > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-17-36" name = "__codelineno-17-36" href = "#__codelineno-17-36" > < / a > < span class = "k" > if< / span > < span class = "bp" > isEmpty< / span > < span class = "p" > ()< / span > < span class = "p" > {< / span >
< a id = "__codelineno-17-37" name = "__codelineno-17-37" href = "#__codelineno-17-37" > < / a > < span class = "n" > front< / span > < span class = "p" > =< / span > < span class = "n" > node< / span >
< a id = "__codelineno-17-38" name = "__codelineno-17-38" href = "#__codelineno-17-38" > < / a > < span class = "n" > rear< / span > < span class = "p" > =< / span > < span class = "n" > node< / span >
@@ -4576,7 +4578,7 @@
< a id = "__codelineno-18-26" name = "__codelineno-18-26" href = "#__codelineno-18-26" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 队尾入队操作 */< / span >
< a id = "__codelineno-18-27" name = "__codelineno-18-27" href = "#__codelineno-18-27" > < / a > < span class = "w" > < / span > < span class = "nx" > pushLast< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-18-28" name = "__codelineno-18-28" href = "#__codelineno-18-28" > < / a > < span class = "w" > < / span > < span class = "kd" > const< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "ow" > new< / span > < span class = "w" > < / span > < span class = "nx" > ListNode< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "p" > );< / span >
< a id = "__codelineno-18-29" name = "__codelineno-18-29" href = "#__codelineno-18-29" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-18-29" name = "__codelineno-18-29" href = "#__codelineno-18-29" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-18-30" name = "__codelineno-18-30" href = "#__codelineno-18-30" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "err" > #< / span > < span class = "nx" > queSize< / span > < span class = "w" > < / span > < span class = "o" > ===< / span > < span class = "w" > < / span > < span class = "mf" > 0< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-18-31" name = "__codelineno-18-31" href = "#__codelineno-18-31" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "err" > #< / span > < span class = "nx" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-18-32" name = "__codelineno-18-32" href = "#__codelineno-18-32" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "err" > #< / span > < span class = "nx" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
@@ -4592,7 +4594,7 @@
< a id = "__codelineno-18-42" name = "__codelineno-18-42" href = "#__codelineno-18-42" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 队首入队操作 */< / span >
< a id = "__codelineno-18-43" name = "__codelineno-18-43" href = "#__codelineno-18-43" > < / a > < span class = "w" > < / span > < span class = "nx" > pushFirst< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-18-44" name = "__codelineno-18-44" href = "#__codelineno-18-44" > < / a > < span class = "w" > < / span > < span class = "kd" > const< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "ow" > new< / span > < span class = "w" > < / span > < span class = "nx" > ListNode< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "p" > );< / span >
< a id = "__codelineno-18-45" name = "__codelineno-18-45" href = "#__codelineno-18-45" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-18-45" name = "__codelineno-18-45" href = "#__codelineno-18-45" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-18-46" name = "__codelineno-18-46" href = "#__codelineno-18-46" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "err" > #< / span > < span class = "nx" > queSize< / span > < span class = "w" > < / span > < span class = "o" > ===< / span > < span class = "w" > < / span > < span class = "mf" > 0< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-18-47" name = "__codelineno-18-47" href = "#__codelineno-18-47" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "err" > #< / span > < span class = "nx" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-18-48" name = "__codelineno-18-48" href = "#__codelineno-18-48" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "err" > #< / span > < span class = "nx" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
@@ -4701,7 +4703,7 @@
< a id = "__codelineno-19-26" name = "__codelineno-19-26" href = "#__codelineno-19-26" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 队尾入队操作 */< / span >
< a id = "__codelineno-19-27" name = "__codelineno-19-27" href = "#__codelineno-19-27" > < / a > < span class = "w" > < / span > < span class = "nx" > pushLast< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "kt" > number< / span > < span class = "p" > )< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "ow" > void< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-19-28" name = "__codelineno-19-28" href = "#__codelineno-19-28" > < / a > < span class = "w" > < / span > < span class = "kd" > const< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "kt" > ListNode< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "ow" > new< / span > < span class = "w" > < / span > < span class = "nx" > ListNode< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "p" > );< / span >
< a id = "__codelineno-19-29" name = "__codelineno-19-29" href = "#__codelineno-19-29" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-19-29" name = "__codelineno-19-29" href = "#__codelineno-19-29" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-19-30" name = "__codelineno-19-30" href = "#__codelineno-19-30" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > queSize< / span > < span class = "w" > < / span > < span class = "o" > ===< / span > < span class = "w" > < / span > < span class = "mf" > 0< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-19-31" name = "__codelineno-19-31" href = "#__codelineno-19-31" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-19-32" name = "__codelineno-19-32" href = "#__codelineno-19-32" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
@@ -4717,7 +4719,7 @@
< a id = "__codelineno-19-42" name = "__codelineno-19-42" href = "#__codelineno-19-42" > < / a > < span class = "w" > < / span > < span class = "cm" > /* 队首入队操作 */< / span >
< a id = "__codelineno-19-43" name = "__codelineno-19-43" href = "#__codelineno-19-43" > < / a > < span class = "w" > < / span > < span class = "nx" > pushFirst< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "kt" > number< / span > < span class = "p" > )< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "ow" > void< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-19-44" name = "__codelineno-19-44" href = "#__codelineno-19-44" > < / a > < span class = "w" > < / span > < span class = "kd" > const< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "kt" > ListNode< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "ow" > new< / span > < span class = "w" > < / span > < span class = "nx" > ListNode< / span > < span class = "p" > (< / span > < span class = "nx" > val< / span > < span class = "p" > );< / span >
< a id = "__codelineno-19-45" name = "__codelineno-19-45" href = "#__codelineno-19-45" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-19-45" name = "__codelineno-19-45" href = "#__codelineno-19-45" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-19-46" name = "__codelineno-19-46" href = "#__codelineno-19-46" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > queSize< / span > < span class = "w" > < / span > < span class = "o" > ===< / span > < span class = "w" > < / span > < span class = "mf" > 0< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-19-47" name = "__codelineno-19-47" href = "#__codelineno-19-47" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-19-48" name = "__codelineno-19-48" href = "#__codelineno-19-48" > < / a > < span class = "w" > < / span > < span class = "k" > this< / span > < span class = "p" > .< / span > < span class = "nx" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nx" > node< / span > < span class = "p" > ;< / span >
@@ -4976,7 +4978,7 @@
< a id = "__codelineno-21-48" name = "__codelineno-21-48" href = "#__codelineno-21-48" > < / a > < span class = "w" > < / span > < span class = "c1" > // 队首入队操作< / span >
< a id = "__codelineno-21-49" name = "__codelineno-21-49" href = "#__codelineno-21-49" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "n" > is_front< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-50" name = "__codelineno-21-50" href = "#__codelineno-21-50" > < / a > < span class = "w" > < / span > < span class = "k" > match< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > front< / span > < span class = "p" > .< / span > < span class = "n" > take< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-51" name = "__codelineno-21-51" href = "#__codelineno-21-51" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-21-51" name = "__codelineno-21-51" href = "#__codelineno-21-51" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-21-52" name = "__codelineno-21-52" href = "#__codelineno-21-52" > < / a > < span class = "w" > < / span > < span class = "nb" > None< / span > < span class = "w" > < / span > < span class = "o" > => < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-53" name = "__codelineno-21-53" href = "#__codelineno-21-53" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nb" > Some< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > .< / span > < span class = "n" > clone< / span > < span class = "p" > ());< / span >
< a id = "__codelineno-21-54" name = "__codelineno-21-54" href = "#__codelineno-21-54" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nb" > Some< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > );< / span >
@@ -4992,7 +4994,7 @@
< a id = "__codelineno-21-64" name = "__codelineno-21-64" href = "#__codelineno-21-64" > < / a > < span class = "w" > < / span > < span class = "c1" > // 队尾入队操作< / span >
< a id = "__codelineno-21-65" name = "__codelineno-21-65" href = "#__codelineno-21-65" > < / a > < span class = "w" > < / span > < span class = "k" > else< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-66" name = "__codelineno-21-66" href = "#__codelineno-21-66" > < / a > < span class = "w" > < / span > < span class = "k" > match< / span > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > rear< / span > < span class = "p" > .< / span > < span class = "n" > take< / span > < span class = "p" > ()< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-67" name = "__codelineno-21-67" href = "#__codelineno-21-67" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-21-67" name = "__codelineno-21-67" href = "#__codelineno-21-67" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-21-68" name = "__codelineno-21-68" href = "#__codelineno-21-68" > < / a > < span class = "w" > < / span > < span class = "nb" > None< / span > < span class = "w" > < / span > < span class = "o" > => < / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-21-69" name = "__codelineno-21-69" href = "#__codelineno-21-69" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nb" > Some< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > .< / span > < span class = "n" > clone< / span > < span class = "p" > ());< / span >
< a id = "__codelineno-21-70" name = "__codelineno-21-70" href = "#__codelineno-21-70" > < / a > < span class = "w" > < / span > < span class = "bp" > self< / span > < span class = "p" > .< / span > < span class = "n" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "nb" > Some< / span > < span class = "p" > (< / span > < span class = "n" > node< / span > < span class = "p" > );< / span >
@@ -5153,7 +5155,7 @@
< a id = "__codelineno-22-59" name = "__codelineno-22-59" href = "#__codelineno-22-59" > < / a > < span class = "cm" > /* 入队 */< / span >
< a id = "__codelineno-22-60" name = "__codelineno-22-60" href = "#__codelineno-22-60" > < / a > < span class = "kt" > void< / span > < span class = "w" > < / span > < span class = "nf" > push< / span > < span class = "p" > (< / span > < span class = "n" > LinkedListDeque< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "n" > deque< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "kt" > int< / span > < span class = "w" > < / span > < span class = "n" > num< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "kt" > bool< / span > < span class = "w" > < / span > < span class = "n" > isFront< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-22-61" name = "__codelineno-22-61" href = "#__codelineno-22-61" > < / a > < span class = "w" > < / span > < span class = "n" > DoublyListNode< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "n" > node< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > newDoublyListNode< / span > < span class = "p" > (< / span > < span class = "n" > num< / span > < span class = "p" > );< / span >
< a id = "__codelineno-22-62" name = "__codelineno-22-62" href = "#__codelineno-22-62" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向node< / span >
< a id = "__codelineno-22-62" name = "__codelineno-22-62" href = "#__codelineno-22-62" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向node< / span >
< a id = "__codelineno-22-63" name = "__codelineno-22-63" href = "#__codelineno-22-63" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > empty< / span > < span class = "p" > (< / span > < span class = "n" > deque< / span > < span class = "p" > ))< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-22-64" name = "__codelineno-22-64" href = "#__codelineno-22-64" > < / a > < span class = "w" > < / span > < span class = "n" > deque< / span > < span class = "o" > -> < / span > < span class = "n" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > deque< / span > < span class = "o" > -> < / span > < span class = "n" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-22-65" name = "__codelineno-22-65" href = "#__codelineno-22-65" > < / a > < span class = "w" > < / span > < span class = "p" > }< / span >
@@ -5313,7 +5315,7 @@
< a id = "__codelineno-23-58" name = "__codelineno-23-58" href = "#__codelineno-23-58" > < / a > < span class = "w" > < / span > < span class = "kr" > pub< / span > < span class = "w" > < / span > < span class = "k" > fn< / span > < span class = "w" > < / span > < span class = "n" > push< / span > < span class = "p" > (< / span > < span class = "n" > self< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "o" > *< / span > < span class = "n" > Self< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > num< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "n" > T< / span > < span class = "p" > ,< / span > < span class = "w" > < / span > < span class = "n" > is_front< / span > < span class = "o" > :< / span > < span class = "w" > < / span > < span class = "kt" > bool< / span > < span class = "p" > )< / span > < span class = "w" > < / span > < span class = "o" > !< / span > < span class = "kt" > void< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-23-59" name = "__codelineno-23-59" href = "#__codelineno-23-59" > < / a > < span class = "w" > < / span > < span class = "kr" > var< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "k" > try< / span > < span class = "w" > < / span > < span class = "n" > self< / span > < span class = "p" > .< / span > < span class = "n" > mem_allocator< / span > < span class = "p" > .< / span > < span class = "n" > create< / span > < span class = "p" > (< / span > < span class = "n" > ListNode< / span > < span class = "p" > (< / span > < span class = "n" > T< / span > < span class = "p" > ));< / span >
< a id = "__codelineno-23-60" name = "__codelineno-23-60" href = "#__codelineno-23-60" > < / a > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > .< / span > < span class = "n" > init< / span > < span class = "p" > (< / span > < span class = "n" > num< / span > < span class = "p" > );< / span >
< a id = "__codelineno-23-61" name = "__codelineno-23-61" href = "#__codelineno-23-61" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front, rear 都指向 node< / span >
< a id = "__codelineno-23-61" name = "__codelineno-23-61" href = "#__codelineno-23-61" > < / a > < span class = "w" > < / span > < span class = "c1" > // 若链表为空,则令 front 和 rear 都指向 node< / span >
< a id = "__codelineno-23-62" name = "__codelineno-23-62" href = "#__codelineno-23-62" > < / a > < span class = "w" > < / span > < span class = "k" > if< / span > < span class = "w" > < / span > < span class = "p" > (< / span > < span class = "n" > self< / span > < span class = "p" > .< / span > < span class = "n" > isEmpty< / span > < span class = "p" > ())< / span > < span class = "w" > < / span > < span class = "p" > {< / span >
< a id = "__codelineno-23-63" name = "__codelineno-23-63" href = "#__codelineno-23-63" > < / a > < span class = "w" > < / span > < span class = "n" > self< / span > < span class = "p" > .< / span > < span class = "n" > front< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > ;< / span >
< a id = "__codelineno-23-64" name = "__codelineno-23-64" href = "#__codelineno-23-64" > < / a > < span class = "w" > < / span > < span class = "n" > self< / span > < span class = "p" > .< / span > < span class = "n" > rear< / span > < span class = "w" > < / span > < span class = "o" > =< / span > < span class = "w" > < / span > < span class = "n" > node< / span > < span class = "p" > ;< / span >
@@ -5435,7 +5437,7 @@
< / div >
< p align = "center" > 图 5-9 基于数组实现双向队列的入队出队操作 < / p >
< p > 在队列的实现基础上,仅需增加“队首入队”和“队尾出队”的方法。 < / p >
< p > 在队列的实现基础上,仅需增加“队首入队”和“队尾出队”的方法: < / p >
< div class = "tabbed-set tabbed-alternate" data-tabs = "5:12" > < input checked = "checked" id = "__tabbed_5_1" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_2" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_3" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_4" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_5" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_6" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_7" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_8" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_9" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_10" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_11" name = "__tabbed_5" type = "radio" / > < input id = "__tabbed_5_12" name = "__tabbed_5" type = "radio" / > < div class = "tabbed-labels" > < label for = "__tabbed_5_1" > Python< / label > < label for = "__tabbed_5_2" > C++< / label > < label for = "__tabbed_5_3" > Java< / label > < label for = "__tabbed_5_4" > C#< / label > < label for = "__tabbed_5_5" > Go< / label > < label for = "__tabbed_5_6" > Swift< / label > < label for = "__tabbed_5_7" > JS< / label > < label for = "__tabbed_5_8" > TS< / label > < label for = "__tabbed_5_9" > Dart< / label > < label for = "__tabbed_5_10" > Rust< / label > < label for = "__tabbed_5_11" > C< / label > < label for = "__tabbed_5_12" > Zig< / label > < / div >
< div class = "tabbed-content" >
< div class = "tabbed-block" >
@@ -6618,7 +6620,7 @@
< / div >
< h2 id = "533" > 5.3.3 双向队列应用< a class = "headerlink" href = "#533" title = "Permanent link" > ¶ < / a > < / h2 >
< p > 双向队列兼具栈与队列的逻辑,< strong > 因此它可以实现这两者的所有应用场景,同时提供更高的自由度< / strong > 。< / p >
< p > 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 < code > push< / code > 到栈中,然后通过 < code > pop< / code > 实现撤销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 < span class = "arithmatex" > \(50\)< / span > 步)。当栈的长度超过 < span class = "arithmatex" > \(50\)< / span > 时,软件需要在栈底(即 队首)执行删除操作。< strong > 但栈无法实现该功能,此时就需要使用双向队列来替代栈< / strong > 。请注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。< / p >
< p > 我们知道,软件的“撤销”功能通常使用栈来实现:系统将每次更改操作 < code > push< / code > 到栈中,然后通过 < code > pop< / code > 实现撤销。然而,考虑到系统资源的限制,软件通常会限制撤销的步数(例如仅允许保存 < span class = "arithmatex" > \(50\)< / span > 步)。当栈的长度超过 < span class = "arithmatex" > \(50\)< / span > 时,软件需要在栈底(队首)执行删除操作。< strong > 但栈无法实现该功能,此时就需要使用双向队列来替代栈< / strong > 。请注意,“撤销”的核心逻辑仍然遵循栈的先入后出原则,只是双向队列能够更加灵活地实现一些额外逻辑。< / p >
<!-- Source file information -->