可直接编译运行,其中方法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. 数据结构图文解析之:栈的简介及C++模板实现

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

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

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

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

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

  8. C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

    前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...

  9. 纪念逝去的岁月——C++实现一个栈(使用类模板)

    这个版本是上个版本的加强版,上个版本的代码:http://www.cnblogs.com/fengbohello/p/4542912.html 目录 1.代码 2.运行结果 1.代码 1.1 调试信息 ...

随机推荐

  1. 关于Java中进程和线程的详解

    一.进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命 周期.它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而 ...

  2. 在ubuntu上面配置nginx实现反向代理和负载均衡

    上一篇文章(http://www.cnblogs.com/chenxizhang/p/4684260.html),我做了一个实验,就是利用Visual Studio,基于Nancy框架,开发了一个自托 ...

  3. grep及正则表达式

    文本搜索工具:grep,egrep,fgrep GREP介绍 grep: 根据模式条件搜索文本,并将符合模式的文本行显示出来.  过滤条件:文本字符和正则表达式的元字符组合而成匹配条件 以正则表达式的 ...

  4. setTimeout,clearTimeout和setInterval

    http://www.cnblogs.com/backuper/archive/2009/12/02/1615129.html var timeout; timeout = setTimeout(hi ...

  5. 自己动手写RTP服务器——关于RTP协议

    转自:http://blog.csdn.net/baby313/article/details/7353605 本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及 ...

  6. 关于C#中的new的用法

    修饰符:隐藏基类中的成员(是基类中的成员,所以字段.属性.事件等等都可以隐藏,不单单是方法哦) public class Car { public void WriteName(string name ...

  7. OC登陆界面登陆按钮动画

    1.原作者:@entotsu 1.1 原作者连接:https://github.com/entotsu/TKSubmitTransition 2.使用: import "HyTransiti ...

  8. hdu 4003 树形dp+分组背包 2011大连赛区网络赛C

    题意:求K个机器人从同一点出发,遍历所有点所需的最小花费 链接:点我 Sample Input 3 1 1 //3个点,从1出发,1个机器人 1 2 1 1 3 1 3 1 2 1 2 1 1 3 1 ...

  9. Wp8—LongListSelector控件使用

    其实从去年后半年起,自己就开始学习windows phone 8 的开发,主要是自己感兴趣同时我也很看好这个系统(现在还是感觉自己认识的有点晚了).工作日的话基本很忙,所以当时想到然的认为用晚上时间可 ...

  10. Qt 学习资料

    Qter开源社区http://www.qter.org/ [Qt教程], 作者yafeilinux [视频] QT学习之路:从入门到精通 <C++ Qt 编程视频教程>