一.栈的概念
栈是一种常见的数据结构,它遵循后进先出的原则。栈可以看作是一种容器,其中的元素按照一种特定的顺序进行插入和删除操作。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。
1.栈的特点
1.元素的插入和删除操作只能在栈的一端进行,该端被称为栈顶。
2.最后插入的元素是第一个被删除的元素,因此称为后进先出。
3.栈中的元素没有编号或索引,只有栈顶指针来指示栈的当前位置。
2.栈的优点
-
简单高效:栈的操作是基于后进先出(LIFO)的原则,入栈和出栈操作都只涉及栈顶元素,因此操作的时间复杂度都是O(1),使得栈的操作非常高效。
-
空间效率高:栈的底层实现可以使用数组或链表,无论是使用静态数组还是动态链表,都可以根据实际需要灵活分配内存,因此在空间利用上比较高效。
-
递归和回溯:栈在递归和回溯算法中扮演着重要的角色。递归函数调用时会将当前函数的状态(包括局部变量、返回地址等)压入栈中,当递归函数返回时,栈顶的状态会被弹出,恢复到上一层递归函数的状态。
-
撤销操作:栈可以用于实现撤销操作,比如文本编辑器中的撤销功能。每当执行一个操作时,将操作的状态存储在栈中,当需要撤销时,只需从栈中弹出最近的状态。
3.栈的缺点
-
容量限制:栈的容量是有限的,无论是基于数组还是链表实现的栈,都会受到内存大小的限制。当栈的元素个数超过容量时,会发生栈上溢(stack overflow)的错误。
-
无随机访问:栈的特点是只能在栈顶进行插入和删除操作,没有提供随机访问的能力。如果需要访问或修改栈中的其他元素,必须先将栈顶的元素弹出,直到达到目标位置。
-
不灵活:栈的特性决定了它的使用场景受到一定的限制。对于需要随机访问、频繁插入