栈(堆栈)
栈类似一个瓶子,只能从一个口进出,属于一种线性表数据结构。堆栈存在两种操作:插入与删除。
瓶口就是栈顶,瓶底就是栈底,当栈里面没有元素时就是空栈。服从先进后出原则,越靠近瓶口的就越早出来。存储方式:顺序存储(类似数组,数组与容器,)与链式存储(类似单链表).
堆栈还可以分成:
静态栈:栈的大小固定,类似数组
动态栈:栈的大小会发生改变,类似链表
栈的操作
1.入栈 push()
2.出栈 pop()
3.空栈 empty()
4.获取当前元素则使用 top()
5.获取栈的大小size()
提示
当使用栈的时候,使用top前必须要判断一下栈是否为空,否则会出现下面的情况
Line 171: Char 16: runtime error: reference binding to misaligned address 0xbebebebebebec0ba for type ‘int’, which requires 4 byte alignment (stl_deque.h)
0xbebebebebebec0ba: note: pointer points here
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/…/lib/gcc/x86_64-linux-gnu/9/…/…/…/…/include/c++/9/bits/stl_deque.h:180:16
示例
存在错误的代码
class Solution {
public:
bool isValid(string s) {
int length = s.length();
if(length % 2!=0) return false;
stack<int> st;
for(int i=0;i<length;i++){
if(s[i]=='(') st.push(')');
else