栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top()、push()、pop()、 size()、empty() ),很好记的。
VS2008中栈的源代码
友情提示:初次阅读时请注意其实现思想,不要在细节上浪费过多的时间。
- //VS2008中 stack的定义 MoreWindows整理(http://blog.csdn.net/MoreWindows)
- template<class _Ty, class _Container = deque<_Ty> >
- class stack
- { // LIFO queue implemented with a container
- public:
- typedef _Container container_type;
- typedef typename _Container::value_type value_type;
- typedef typename _Container::size_type size_type;
- typedef typename _Container::reference reference;
- typedef typename _Container::const_reference const_reference;
- stack() : c()
- { // construct with empty container
- }
- explicit stack(const _Container& _Cont) : c(_Cont)
- { // construct by copying specified container
- }
- bool empty() const
- { // test if stack is empty
- return (c.empty());
- }
- size_type size() const
- { // test length of stack
- return (c.size());
- }
- reference top()
- { // return last element of mutable stack
- return (c.back());
- }
- const_reference top() const
- { // return last element of nonmutable stack
- return (c.back());
- }
- void push(const value_type& _Val)
- { // insert element at end
- c.push_back(_Val);
- }
- void pop()
- { // erase last element
- c.pop_back();
- }
- const _Container& _Get_container() const
- { // get reference to container
- return (c);
- }
- protected:
- _Container c; // the underlying container
- };
可以看出,由于栈只是进一步封装别的数据结构,并提供自己的接口,所以代码非常简洁,如果不指定容器,默认是用deque来作为其底层数据结构的(对deque不是很了解?可以参阅《STL系列之一 deque双向队列》)。下面给出栈的使用范例:
- //栈 stack支持 empty() size() top() push() pop()
- // by MoreWindows(http://blog.csdn.net/MoreWindows)
- #include <stack>
- #include <vector>
- #include <list>
- #include <cstdio>
- using namespace std;
- int main()
- {
- //可以使用list或vector作为栈的容器,默认是使用deque的。
- stack<int, list<int>> a;
- stack<int, vector<int>> b;
- int i;
- //压入数据
- for (i = 0; i < 10; i++)
- {
- a.push(i);
- b.push(i);
- }
- //栈的大小
- printf("%d %d\n", a.size(), b.size());
- //取栈项数据并将数据弹出栈
- while (!a.empty())
- {
- printf("%d ", a.top());
- a.pop();
- }
- putchar('\n');
- while (!b.empty())
- {
- printf("%d ", b.top());
- b.pop();
- }
- putchar('\n');
- return 0;
- }
转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/6950881
相关推荐
STL之stack栈(csdn)————程序
心希盼 c++ STL Stack(栈) 包含了用List和Vector来实现的Stack 详细说明请看“心希盼 Stack.doc”
二、 实验内容 1、实现一个栈数据结构。 2、利用栈实现中缀表达式与前缀表达式的转换。 三、相关内容介绍 标准的表达式如"A+B",在数学上学名叫中缀表达式(Infix Notation),原因是运算符号在两个运算对象的中间...
这个文件中有两种数据结构:stack和vector_stack,当然用法都一样,只不过第二个偷了点懒 第一个是用数组实现的,第二个是用vector实现的,个人觉得第一个更快 有时间会更新,只写了几个函数 想知道更多?赶紧下载...
答案
主要介绍了C++ STL容器stack和queue详解的相关资料,需要的朋友可以参考下
主要介绍了JS中的算法与数据结构之栈(Stack),结合实例形式详细分析了js中栈的概念、原理、定义及常见使用方法,需要的朋友可以参考下
里面主要有两个设计《单链表的基本操作》和《利用栈设计多种计算》 里面有大量详细的流程图和算法分析。
C++实现了栈、队列与二叉查找树,用于学习,直接调用即可
本示例将展示C++ STL(Standard Template Library)中std::stack 的基本使用,并附带一个使用std::array 的示例,尽管它们在实际应用中通常不会一起使用,因为std::stack 是一个抽象数据结构,通常用于实现后进先出...
常用的数据结构有array(数组)、vector(向量)、list(列表)、tree(树)、stack(栈)、queue(队列)、hash table(散列表)、set(集合)、map(映射表)等等。这些数据结构按结构可以分为序列式(sequence)...
数据结构用两个栈实现一个队列的实例 栈是先进后出,队列是先进先出 每次元素都push在st1中,pop的时候如果st2为...#include <stack> #include template class SQueue { public: void Push(const T& value); T Pop
栈的模板,个人实现,常数小,运行快,远超STL的stack容器。 并且,这份模板便于修改,可以快速看懂并且加上自己所需的内容,这也比STL的stack要更加灵活。 下载是不亏的!
代码见附件 2 实验内容 ...提示:可以使用 STL 中的 stack 来辅助实现。 2、若二叉树的每一个结点具有数值,如何搜索二叉树,找到指定值的叶子结点? 3、若已知叶子结点的指针,如何输出从根到该叶子的路径?
线性表应用——复数四则运算 栈和队列应用——迷宫问题 树和图应用——图遍历生成树演示 查找和排序应用——3阶B-树应用 基于STL数据结构及应用——STL的栈stack类 (代码有参考网络,如有侵权便删)
codeup《算法笔记》6.7小节——C++标准模板库(STL)介绍->stack的常见用法详解题目A:简单计算器题目编号:1918、《算法笔记》7.1小节——数据结构专题(1)->栈的应用题目A:简单计算器题目编号:1918: 题目描述: ...
本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...
8.2.2栈解旋(unwinding) 39 8.2.3异常接口声明 40 8.2.4异常类型和异常变量的生命周期 40 8.2.5异常的层次结构(继承在异常中的应用) 46 8.3标准程序库异常 47 8.4训练强化 51 9 C++输入和输出流 51 9.1 I/O流的概念...
5.10.2 检查函数指针调用稚栈的合法性 5.10.3 检查调用堆栈的合法性 5.11 TRACEN 5.12 VEAIFY宏 5.13 移植Visual C++旧的32位版本 5.13.l 转换早期的32位工作空间和工程 5.13.2 与Visual C++以前的...