From 4223cceda1552bba4b8d84e00a28a4eff7e14e9a Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Thu, 5 Jan 2023 01:39:22 +0800 Subject: [PATCH] Update stack.md --- docs/chapter_preface/about_the_book.md | 2 +- docs/chapter_stack_and_queue/stack.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/chapter_preface/about_the_book.md b/docs/chapter_preface/about_the_book.md index bc79115a3..54cd2844c 100644 --- a/docs/chapter_preface/about_the_book.md +++ b/docs/chapter_preface/about_the_book.md @@ -86,7 +86,7 @@ comments: true - 文章中的重要名词会用「」符号标注,例如「数组 Array」。名词混淆会导致不必要的歧义,因此最好可以记住这类名词(包括中文和英文),以便后续阅读文献时使用。 - 重点内容、总起句、总结句会被 **加粗** ,此类文字值得特别关注。 - 专有名词和有特指含义的词句会使用 “ ” 标注,以避免歧义。 -- 在工程应用中,每种语言都有相应的注释规范;而本书放弃了一部分的注释规范性,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注释、内容注释、多行注释。 +- 在工程应用中,每种语言都有注释规范;而本书放弃了一部分的注释规范性,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注释、内容注释、多行注释。 === "Java" diff --git a/docs/chapter_stack_and_queue/stack.md b/docs/chapter_stack_and_queue/stack.md index c982f5a75..a8b06575b 100644 --- a/docs/chapter_stack_and_queue/stack.md +++ b/docs/chapter_stack_and_queue/stack.md @@ -236,7 +236,9 @@ comments: true ### 基于链表的实现 -使用「链表」实现栈时,将链表的尾结点看作栈顶即可。 +使用「链表」实现栈时,将链表的头结点看作栈顶,尾结点看作栈底。 + +对于入栈操作,将元素插入到链表头部即可,这种结点添加方式被称为“头插法”。而对于出栈操作,则将头结点从链表中删除即可。 受益于链表的离散存储方式,栈的扩容更加灵活,删除元素的内存也会被系统自动回收;缺点是无法像数组一样高效地随机访问,并且由于链表结点需存储指针,导致单个元素占用空间更大。 @@ -592,7 +594,7 @@ comments: true ### 基于数组的实现 -使用「数组」实现栈时,将数组的尾部当作栈顶。准确地说,我们需要使用「列表」,因为入栈的元素可能是源源不断的,因此使用动态数组可以方便扩容。 +使用「数组」实现栈时,将数组的尾部当作栈顶,这样可以保证入栈与出栈操作的时间复杂度都为 $O(1)$ 。准确地说,由于入栈的元素可能是源源不断的,我们需要使用可以动态扩容的「列表」。 基于数组实现的栈,优点是支持随机访问,缺点是会造成一定的空间浪费,因为列表的容量始终 $\geq$ 元素数量。