Skip to content

Commit 111e2bb

Browse files
author
wangshan
committed
feat: 栈的应用(feature)
1 parent 55adb01 commit 111e2bb

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

docs/views/guide/datastruc.md

+29-1
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,33 @@ stackLength: 返回栈内元素个数
9595
### 栈的链式存储空间
9696

9797
> 使用单链表来实现,栈数据结构。而且这种结构不需要考虑栈空间的大小。
98+
> 注意:栈是通过栈顶来插入和删除元素,所有的后续操作都是通过栈顶来继续。
9899
99-
注意:栈是通过栈顶来插入和删除元素,所有的后续操作都是通过栈顶来继续。
100+
**基本操作**
101+
102+
1. (push)入栈
103+
原理:每次入栈都是通过将新元素复制给栈顶指针,而后再将栈顶指针的引用复制给头指针。每次将新元素复制给栈顶指针`top`这一步的目的是,因为入栈操作是通过栈顶指针来继续的,所以每次栈顶指针`top`,都应该是记录的最新元素。
104+
105+
2. pop 出栈
106+
原理:找到栈顶的元素的前一位元素;保存栈顶元素的引用到临时变量`p`, 将栈顶的`p`示范。并将栈顶前一位元素,作为新的栈顶元素复制给,栈顶指针`top`
107+
108+
**顺序栈特点**
109+
110+
1. 时间复杂度 O(1)
111+
2. 空间复杂度开销大,因为需要预先预留内存空间,会造成内存浪费。
112+
3. 但由于在存储定位时,是非常方便的。
113+
114+
**链栈特点**
115+
116+
1. 时间复杂度 O(1)
117+
2. 无需声明预留内存空间
118+
3. 存储定位比较复杂,因为每个数据元素,都存在指针的引用,这也就增加了内存开销。
119+
120+
**两种数据结构的选择**
121+
122+
> 如果在使用过程中,元素的变化不可预料则选择,链栈;反之,如果元素变化范围消,可预先确定,则选择顺序栈。
123+
124+
**栈的应用**
125+
126+
1. 阶乘
127+
2. 递归求解斐波拉契数列

0 commit comments

Comments
 (0)