可直接编译运行,其中方法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. 使用CocoaPod导入Swift第三方库报错

    在使用cocoapod导入swift第三方时出现这样的错误: [!] Pods written in Swift can only be integrated as frameworks; add ` ...

  2. 三表联查,这是我目前写过的最长的sql语句,嗯嗯,果然遇到问题才能让我更快成长,更复杂的语句也有了一些心得了

    select sum(amount),sum(card_number) from sy_user inner join sy_admin on sy_user.customer_id=sy_admin ...

  3. ElasticSearch入门系列(六)分布式操作

    一.路由文档到分片 当你索引一个文档的时候,他被存储在单独一个主分片上.Elasticsearch根据一个算法来找到所在分片上. shard=hash(routing)%number_of_prima ...

  4. Eclipse搭建Python开发环境+Python中文处理

    1.基本需求 1.Eclipse 集成开发环境下载 http://115.com/file/c2vz7io5    JDK6下载 http://115.com/file/c2vz7idq     2. ...

  5. Beeline known issues

    If you use nohup myscript.sh , You beeline scripts may not work, Pay attention to this in your job.

  6. Java Bad version number in .class file

    错误信息: java.lang.UnsupportedClassVersionError: Bad version number in .class file at java.lang.ClassLo ...

  7. Codeforces 687C. The Values You Can Make (dp)

    题目链接:http://codeforces.com/problemset/problem/687/C 题目大概说给n个各有价值的硬币,要从它们中选出若干个组合成面值k,而要求的是各个方案里这些选出的 ...

  8. 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

    Linux kernel  的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地 ...

  9. android 自定义按钮实现 home键 和返回键

    由于在自己做的东西中用到了就总结一下,自己做了测试 在一个程序运行中如果按 返回键  分别执行了 : onpause()     onStop()   onDestory()方法 如果点击 home键 ...

  10. 关于Eclipse插件开发(四)-------给视图加下拉菜单和按钮和加入编辑器.

    本例将给视图加入下拉菜单和按钮,同时再为列表添加一个右键菜单. 创建ActionGroup类 加入菜单和按钮的方法与SWT和JFace组件的一样,先创建一个ActionGroup代码如下: MyAct ...