可直接编译运行,其中方法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多线程--信号量Semaphore的使用

    Semaphore可以控制某个共享资源可被同时访问的次数,即可以维护当前访问某一共享资源的线程个数,并提供了同步机制.例如控制某一个文件允许的并发访问的数量. 例如网吧里有100台机器,那么最多只能提 ...

  2. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  3. js 比较好的博客

    1.0 作者:cloudgamer http://www.cnblogs.com/cloudgamer/archive/2010/04/01/ImageZoom.html

  4. 瘟疫公司中国版(Android)手动破解内购

    前言 洒家近日下载了个瘟疫公司中国版(安卓版)(com.easymobi.plagueinc.mi ,版本 1.1.2(5)(.mi 小米版)),发现游戏需要内购而且价格不菲. 需求 root权限 文 ...

  5. Unix常用指令

    pwd 表示获取自己当前所在位置 ls 表示查看当前文件夹中的内容 cd 进入指定目录 mkdir  文件夹1 创建一个文件夹名为文件夹1的文件夹 rmdir  文件夹2 删除一个文件夹名为文件夹2的 ...

  6. SqlServer根据时段统计数据

    create table ST_PPTN_R_Real ( TID int primary key identity(1,1), STCD varchar(100) not null, TM date ...

  7. 如何使用开源库,吐在VS2013发布之前,顺便介绍下VS2013的新特性&quot;Bootstrap&quot;

    刚看到Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看 看了下VS2013带来的"新特性",直觉上看,除了引 ...

  8. SwitchCompat 修改颜色

    Ok, so I'm sorry but most of these answers are incomplete or have some minor bug in them. The very c ...

  9. FIR系统的递归与非递归实现

    首先,因为FIR的脉冲响应是有限长,所以总是可以非递归实现的: 其次,也可以用递归系统来实现它. 以滑动平均做例子,最直观的想法就是,每次来一个新的值,丢掉最老的,加上最新的: y[n]=y[n-1] ...

  10. 观察者模式学习--使用jdk的工具类简单实现

    观察者模式学习之二:使用jdk的自带的工具类实现,与自己实现相比,两者有以下的区别: 1,自己实现,需要定义观察者的接口类和目标对象的接口类.使用java util的工具类,则不需要自己定义观察者和目 ...