File tree 1 file changed +29
-1
lines changed
1 file changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -95,5 +95,33 @@ stackLength: 返回栈内元素个数
95
95
### 栈的链式存储空间
96
96
97
97
> 使用单链表来实现,栈数据结构。而且这种结构不需要考虑栈空间的大小。
98
+ > 注意:栈是通过栈顶来插入和删除元素,所有的后续操作都是通过栈顶来继续。
98
99
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 . 递归求解斐波拉契数列
You can’t perform that action at this time.
0 commit comments