数据结构笔记(三)——栈和队列

  1. 栈是限定仅在表尾(栈顶)进行插入和删除操作的线性表。又被成为后进先出(LIFO)的线性表。
    ·栈的顺序存储结构:基于数组(下标为0的一段为栈底);
    ·栈的链式存储结构:基于链表(栈顶放在单链表的头部;链栈通常不需要头结点)。

  2. STL stack容器适配器
    在这里插入图片描述
    ·stack 容器适配器的模板有两个参数。第一个参数是存储对象的类型,第二个参数是底层容器的类型。stack 的底层容器默认是 deque 容器,因此模板类型其实是 stack<typename T, typename Container=deque>。
    ·创建堆栈时,不能在初始化列表中用对象来初始化,但是可以用另一个容器来初始化,只要堆栈的底层容器类型和这个容器的类型相同。

std::list<double> values {1.414, 3.14159265, 2.71828};
std::stack<double,std::list<double>> my_stack (values);
  1. STL stack基本操作
    ·top():返回一个栈顶元素的引用,类型为 T&。
    ·push(const T& obj):可以将对象副本压入栈顶,通过调用底层容器的 push_back() 函数完成的。
    ·push(T&& obj):以移动对象的方式将对象压入栈顶,通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
    ·pop():弹出栈顶元素。
    ·size():返回栈中元素的个数。
    ·empty():在栈中没有元素的情况下返回 true。
    ·emplace():用传入的参数调用构造函数,在栈顶生成对象。
    ·swap(stack & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。

  2. 应用
    ·进制转换:任给十进制整数n,将其转换为2进制的表示形式。
    在这里插入图片描述
    ·栈混洗:三个栈A、B、S(B、S初始为空),将A的栈顶元素弹出压入S,或将S的栈顶元素弹出压入B,直至A中所有元素转入B。
    (对于<1,2,3,…,n]的栈混洗,当且仅当对于任意i<j,栈混洗中不含模式[…,j+1,.…,i,…,j,…>,即“312”模式)
    在这里插入图片描述
    ·括号匹配:遇左括号进栈,遇右括号出栈。
    在这里插入图片描述
    ·中缀表达式:操作数按顺序进栈,运算符则需比较当前运算符与栈顶运算符的优先级(栈顶低:当前进栈;栈顶高:计算后结果入栈;相等:去括号并接收下一字符)
    在这里插入图片描述
    ·逆波兰表达式(RPN;又称后缀表达式):操作数入栈;遇运算符先找出所需操作数,运算后入栈。
    在这里插入图片描述
    求逆波兰表达式:在中缀表达式中,对每个运算符所涉及的操作数加上括号,将运算符移动至对应括号后,再去除所有括号即可。

  3. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(FIFO)的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。
    ·队列同样有顺序存储和链式存储两种方式。

  4. 循环队列:头尾相接的顺序存储结构。解决顺序存储的假溢出问题(队头空队尾满)。
    ·假设front 指针指向队头元素 , rear 指针指向队尾元素的下一个位置。若队列最大尺寸为QueueSize,那么队列满的条件是(rear+1)%QueueSize==front;通用的计算队列长度公式为(rear- front + QueueSize) %QueueSize

  5. 链队列:队头指针指向头节点;队尾指针指向末节点。

  6. STL queue的使用
    在这里插入图片描述
    ·front():返回 queue 中第一个元素的引用。
    ·back():返回 queue 中最后一个元素的引用。
    ·push(const T& obj):在 queue 的尾部添加一个元素的副本。
    ·push(T&& obj):以移动的方式在 queue 的尾部添加元素。
    ·pop():删除 queue 中的第一个元素。
    ·size():返回 queue 中元素的个数。
    ·empty():如果 queue 中没有元素的话,返回 true。
    ·emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
    ·swap(queue &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。

发布了12 篇原创文章 · 获赞 0 · 访问量 123

猜你喜欢

转载自blog.csdn.net/weixin_43279709/article/details/104789994