可直接编译运行,其中方法status为形象的显示出栈的结构:

 // visual stack , need define "cout<<" 

 #include <iostream>
 using std::cout;

 template<typename T>
 struct item
 {
     item():value(),last(NULL),next(NULL){}
     item *last,*next;
     T value;
 };
 template<typename T>
 class Stack
 {
     public:
         Stack():m_size(),m_bottom(NULL),m_top(NULL){}
         int size();
         bool push(const T&);
         T pop();
         T top();
         bool empty();
         void status();
     private:
         item<T> *m_bottom,*m_top;
         int m_size;
 };

 ///////////////////
 int main()
 {
     Stack<int> st;
     ;i<;i++)
     {
         st.push(i);
         st.status();
     }
     cout<<"size="<<st.size()<<"\n";

     ;i<;i++)
     {
         st.pop();
         st.status();
     }
     if(st.empty())cout<<"empty\n";
     cout<<st.top()<<"\n";
     ;
 }

 ////////////////////////////
 template<typename T>
 inline int Stack<T>::size(){return m_size;}

 template<typename T>
 inline ?false:true;}

 template<typename T>
 inline T Stack<T>::top(){?m_top->value:T();}

 template<typename T>
 bool Stack<T>::push(const T& t)
 {
     )
     {
         m_bottom=new item<T>;
         m_bottom->value=t;
         m_top=m_bottom;
     }
     else
     {
         m_top->next=new item<T>;
         m_top->next->value=t;
         m_top->next->last=m_top;
         m_top=m_top->next;
     }
     m_size++;
     return true;
 }

 template<typename T>
 T Stack<T>::pop()
 {
     )
     {
         T t=m_top->value;
         delete m_top;
         m_bottom=m_top=NULL;
         m_size=;
         return t;
     }
     )
     {
         return T();
     }
     else
     {
         T t=m_top->value;
         m_top=m_top->last;
         delete m_top->next;
         m_top->next=NULL;
         m_size--;
         return t;
     }
     return T();
 }

 template<typename T>
 void Stack<T>::status()
 {
     item<T> *p;
     cout<<"栈顶  |\n";
      )return ;
     )
     {
         for(p=m_top;p!=NULL;p=p->last)
         {
             if(p->last==NULL)cout<<"栈底  |"<<p->value<<"|\n";
             else cout<<"      |"<<p->value<<"|\n";
         }
     }
     else
     {
         int i;
         ;i<;p=p->last,i++)cout<<"      |"<<p->value<<"|\n";
         ;i<;p=p->next,i++);
         cout<<"      略...\n";
         ;i--,p=p->last)
         {
             )cout<<"栈底  |"<<p->value<<"|\n";
             else cout<<"      |"<<p->value<<"|\n";
         }
     }
 }

c++用双向链表实现模板栈的更多相关文章

  1. ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)

    本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...

  2. 栈的图文解析 和 对应3种语言的实现(C/C++/Java)

    概要 本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例.注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈.内容包括:1. 栈的介绍2. 栈的C实现3. 栈的 ...

  3. 栈 - 从零开始实现by C++

    参考链接:数据结构探险-栈篇 学了队列之后,栈就很简单了,换汤不换药.   栈 栈的模型 后进先出(电梯,进制转换,括号的匹配检测)   栈的基本元素 栈顶,栈底(一般很少用到),栈容量,栈长度 注意 ...

  4. 你是否决绝平庸,你有勇气来学C/C++吗,有勇气来检验你是否经得起世界五百强的面试

       如果你来传智播客学习 你的目标就是要积累工作经验 有机会参加世界五百强的面试 秒杀世界五百强的面试 赢得高薪的offer! C/C++课程大纲 C语言3周21天 完全掌握C语言的本质,成为一名合 ...

  5. Standard PHP Library(SPL)中的数据结构

    SPL提供了一组标准数据结构. SplDoublyLinkedList Class:双向链表(DLL)是在两个方向上相互链接的节点列表.当底层结构是dll时,迭代器的操作.对两端的访问.节点的添加或删 ...

  6. LRU最近最少使用算法

    最近最少使用算法有两种实现方式: (1)记时法:对于每一页增设一个访问时间计时器.每当一个页面被访问时,当时的绝对时钟内容被复制到对应的访问时间计时器中.这样系统就记录了内存中所有页面最后一次被访问的 ...

  7. 数据结构图文解析之:栈的简介及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  8. C++采用模板实现栈的方法

    今天又看了遍<effective C++>,手动实现了一下条款42中的栈,贴出来当博客的处女贴. 首先栈的声明如下,采用了模板传入类型,而栈的底层采用是个链表. // stack.h // ...

  9. 用C++类模板实现栈结构出现的问题以及思考

    C++中使用了模板来减少方法相同但是类型不一样带来的函数重载以及大量复制代码的问题.这里主要说说类模板   类模板的定义:   template<TYPENAME Type>   clas ...

随机推荐

  1. Linux--shell脚本之正则表达式

    一.正则表达式的概念及特点: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑.规 ...

  2. openx中如何使用site-variable(参数)限制(关键词)广告显示

    openx是个很强大的广告管理系统,可以根据不同的情况显示不同的广告.其中可以根据get参数值的不同来显示,即delivery limitation中的site-variable选项,name表示变量 ...

  3. 【BZOJ】3028: 食物

    http://www.lydsy.com/JudgeOnline/problem.php?id=3028 题意: 每种食物的限制如下:汉堡:偶数个:可乐:0个或1个鸡腿:0个,1个或2个蜜桃:奇数个鸡 ...

  4. Bash中各种以$开头的特殊变量的含义

    $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参 ...

  5. 第19章 queue队列容器

    /* 第19章 queue队列容器 19.1 queue技术原理 19.2 queue应用基础 19.3 本章小结 */ // 第19章 queue队列容器 // 19.1 queue技术原理 // ...

  6. ci 使用体会

    1.在git review后,必须前一天commit先merge后,下一个commit 才能merge,不然就会出现merge pending的状态. 2.jenkins的gerrit trigger ...

  7. json对象和json字符串有啥区别啊

    json对象可以通过javascript存取属性!json对象装成json字符串经常用于前后台传输数据! 如果你在前台使用,那么Json对象可以通过xx.name来调用,如果是字符串,那么就是字符串了 ...

  8. 自定义UIAlertView

    You can change accessoryView to any own customContentView in a standard alert view in iOS7 [alertVie ...

  9. 【Reporting Services 报表开发】— 表达式

    一.常用的SSRS原始函数可以打开文本框的表达式中看到,如图1 图1 如下为SSRS中设计报表时常用的运算函数: 运算符/函数 说明 + 前后位数字则为加法,前后为字符串则为链接符号 - 数值减法 * ...

  10. jquery 匹配select下拉框与列表框

    今天工作中用到 GrapyCity 的 wijmo ui 控件. 要给系统中所有类型的控件加统一样式 用法 $("input [type='text']").wijtext(); ...