Skip to content

Commit

Permalink
Update stack.md
Browse files Browse the repository at this point in the history
  • Loading branch information
krahets committed Jan 4, 2023
1 parent 01cdc2a commit 4223cce
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
2 changes: 1 addition & 1 deletion docs/chapter_preface/about_the_book.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ comments: true
- 文章中的重要名词会用「」符号标注,例如「数组 Array」。名词混淆会导致不必要的歧义,因此最好可以记住这类名词(包括中文和英文),以便后续阅读文献时使用。
- 重点内容、总起句、总结句会被 **加粗** ,此类文字值得特别关注。
- 专有名词和有特指含义的词句会使用 “ ” 标注,以避免歧义。
- 在工程应用中,每种语言都有相应的注释规范;而本书放弃了一部分的注释规范性,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注释、内容注释、多行注释。
- 在工程应用中,每种语言都有注释规范;而本书放弃了一部分的注释规范性,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注释、内容注释、多行注释。

=== "Java"

Expand Down
6 changes: 4 additions & 2 deletions docs/chapter_stack_and_queue/stack.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,9 @@ comments: true

### 基于链表的实现

使用「链表」实现栈时,将链表的尾结点看作栈顶即可。
使用「链表」实现栈时,将链表的头结点看作栈顶,尾结点看作栈底。

对于入栈操作,将元素插入到链表头部即可,这种结点添加方式被称为“头插法”。而对于出栈操作,则将头结点从链表中删除即可。

受益于链表的离散存储方式,栈的扩容更加灵活,删除元素的内存也会被系统自动回收;缺点是无法像数组一样高效地随机访问,并且由于链表结点需存储指针,导致单个元素占用空间更大。

Expand Down Expand Up @@ -592,7 +594,7 @@ comments: true

### 基于数组的实现

使用「数组」实现栈时,将数组的尾部当作栈顶。准确地说,我们需要使用「列表」,因为入栈的元素可能是源源不断的,因此使用动态数组可以方便扩容
使用「数组」实现栈时,将数组的尾部当作栈顶,这样可以保证入栈与出栈操作的时间复杂度都为 $O(1)$ 。准确地说,由于入栈的元素可能是源源不断的,我们需要使用可以动态扩容的「列表」。

基于数组实现的栈,优点是支持随机访问,缺点是会造成一定的空间浪费,因为列表的容量始终 $\geq$ 元素数量。

Expand Down

0 comments on commit 4223cce

Please sign in to comment.