`

STL系列之二 stack栈

 
阅读更多

栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个常用操作函数(top()、push()、pop()、 size()、empty() ),很好记的。

 

 

 

 

VS2008中栈的源代码

友情提示:初次阅读时请注意其实现思想,不要在细节上浪费过多的时间。

[cpp] view plaincopy
 
  1. //VS2008中 stack的定义 MoreWindows整理(http://blog.csdn.net/MoreWindows)  
  2. template<class _Ty, class _Container = deque<_Ty> >  
  3. class stack  
  4. {   // LIFO queue implemented with a container  
  5. public:  
  6.     typedef _Container container_type;  
  7.     typedef typename _Container::value_type value_type;  
  8.     typedef typename _Container::size_type size_type;  
  9.     typedef typename _Container::reference reference;  
  10.     typedef typename _Container::const_reference const_reference;  
  11.   
  12.     stack() : c()  
  13.     {   // construct with empty container  
  14.     }  
  15.   
  16.     explicit stack(const _Container& _Cont) : c(_Cont)  
  17.     {   // construct by copying specified container  
  18.     }  
  19.   
  20.     bool empty() const  
  21.     {   // test if stack is empty  
  22.         return (c.empty());  
  23.     }  
  24.   
  25.     size_type size() const  
  26.     {   // test length of stack  
  27.         return (c.size());  
  28.     }  
  29.   
  30.     reference top()  
  31.     {   // return last element of mutable stack  
  32.         return (c.back());  
  33.     }  
  34.   
  35.     const_reference top() const  
  36.     {   // return last element of nonmutable stack  
  37.         return (c.back());  
  38.     }  
  39.   
  40.     void push(const value_type& _Val)  
  41.     {   // insert element at end  
  42.         c.push_back(_Val);  
  43.     }  
  44.   
  45.     void pop()  
  46.     {   // erase last element  
  47.         c.pop_back();  
  48.     }  
  49.   
  50.     const _Container& _Get_container() const  
  51.     {   // get reference to container  
  52.         return (c);  
  53.     }  
  54.   
  55. protected:  
  56.     _Container c;   // the underlying container  
  57. };  

可以看出,由于栈只是进一步封装别的数据结构,并提供自己的接口,所以代码非常简洁,如果不指定容器,默认是用deque来作为其底层数据结构的(对deque不是很了解?可以参阅《STL系列之一 deque双向队列》)。下面给出栈的使用范例:

[cpp] view plaincopy
 
  1. //栈 stack支持 empty() size() top() push() pop()  
  2. // by MoreWindows(http://blog.csdn.net/MoreWindows)  
  3. #include <stack>  
  4. #include <vector>  
  5. #include <list>  
  6. #include <cstdio>  
  7. using namespace std;  
  8. int main()  
  9. {  
  10.     //可以使用list或vector作为栈的容器,默认是使用deque的。  
  11.     stack<int, list<int>>      a;  
  12.     stack<int, vector<int>>   b;  
  13.     int i;  
  14.       
  15.     //压入数据  
  16.     for (i = 0; i < 10; i++)  
  17.     {  
  18.         a.push(i);  
  19.         b.push(i);  
  20.     }  
  21.   
  22.     //栈的大小  
  23.     printf("%d %d\n", a.size(), b.size());  
  24.   
  25.     //取栈项数据并将数据弹出栈  
  26.     while (!a.empty())  
  27.     {  
  28.         printf("%d ", a.top());  
  29.         a.pop();  
  30.     }  
  31.     putchar('\n');  
  32.   
  33.     while (!b.empty())  
  34.     {  
  35.         printf("%d ", b.top());  
  36.         b.pop();  
  37.     }  
  38.     putchar('\n');  
  39.     return 0;  
  40. }  

 

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/6950881

分享到:
评论

相关推荐

    STL之stack栈(csdn)————程序.pdf

    STL之stack栈(csdn)————程序

    心希盼 c++ STL Stack(栈)

    心希盼 c++ STL Stack(栈) 包含了用List和Vector来实现的Stack 详细说明请看“心希盼 Stack.doc”

    栈和队列的应用实验 利用栈实现中缀表达式与前缀表达式的转换

    二、 实验内容 1、实现一个栈数据结构。 2、利用栈实现中缀表达式与前缀表达式的转换。 三、相关内容介绍 标准的表达式如"A+B",在数学上学名叫中缀表达式(Infix Notation),原因是运算符号在两个运算对象的中间...

    手写stack栈数据结构

    这个文件中有两种数据结构:stack和vector_stack,当然用法都一样,只不过第二个偷了点懒 第一个是用数组实现的,第二个是用vector实现的,个人觉得第一个更快 有时间会更新,只写了几个函数 想知道更多?赶紧下载...

    educoder答案.rar

    答案

    C++ STL容器stack和queue详解

    主要介绍了C++ STL容器stack和queue详解的相关资料,需要的朋友可以参考下

    JS中的算法与数据结构之栈(Stack)实例详解

    主要介绍了JS中的算法与数据结构之栈(Stack),结合实例形式详细分析了js中栈的概念、原理、定义及常见使用方法,需要的朋友可以参考下

    数据结构课程设计(链表与栈)

    里面主要有两个设计《单链表的基本操作》和《利用栈设计多种计算》 里面有大量详细的流程图和算法分析。

    C++数据结构接口(栈、队列与二叉查找树)

    C++实现了栈、队列与二叉查找树,用于学习,直接调用即可

    C++stack介绍及详细使用示例(源代码)

    本示例将展示C++ STL(Standard Template Library)中std::stack 的基本使用,并附带一个使用std::array 的示例,尽管它们在实际应用中通常不会一起使用,因为std::stack 是一个抽象数据结构,通常用于实现后进先出...

    stl数据结构.docx

    常用的数据结构有array(数组)、vector(向量)、list(列表)、tree(树)、stack(栈)、queue(队列)、hash table(散列表)、set(集合)、map(映射表)等等。这些数据结构按结构可以分为序列式(sequence)...

    数据结构用两个栈实现一个队列的实例

    数据结构用两个栈实现一个队列的实例 栈是先进后出,队列是先进先出 每次元素都push在st1中,pop的时候如果st2为...#include &lt;stack&gt; #include template class SQueue { public: void Push(const T& value); T Pop

    栈的模板,个人实现,常数小!

    栈的模板,个人实现,常数小,运行快,远超STL的stack容器。 并且,这份模板便于修改,可以快速看懂并且加上自己所需的内容,这也比STL的stack要更加灵活。 下载是不亏的!

    北京邮电大学_信通院_数据结构_二叉树 C++

    代码见附件 2 实验内容 ...提示:可以使用 STL 中的 stack 来辅助实现。 2、若二叉树的每一个结点具有数值,如何搜索二叉树,找到指定值的叶子结点? 3、若已知叶子结点的指针,如何输出从根到该叶子的路径?

    数据结构实验报告.docx

    线性表应用——复数四则运算 栈和队列应用——迷宫问题 树和图应用——图遍历生成树演示 查找和排序应用——3阶B-树应用 基于STL数据结构及应用——STL的栈stack类 (代码有参考网络,如有侵权便删)

    《算法笔记》codeup6.7和7.1题目A简单计算器题目编号1918全部测试样例和输出样例

    codeup《算法笔记》6.7小节——C++标准模板库(STL)介绍-&gt;stack的常见用法详解题目A:简单计算器题目编号:1918、《算法笔记》7.1小节——数据结构专题(1)-&gt;栈的应用题目A:简单计算器题目编号:1918: 题目描述: ...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    C++进阶课程讲义_v1.0.4.pdf

    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流的概念...

    McGraw C++程序调试实用手册

    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++以前的...

Global site tag (gtag.js) - Google Analytics