可直接编译运行,其中方法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;
for(int i=;i<;i++)
{
st.push(i);
st.status();
}
cout<<"size="<<st.size()<<"\n"; for( i=;i<;i++)
{
st.pop();
st.status();
}
if(st.empty())cout<<"empty\n";
cout<<st.top()<<"\n";
return ;
} ////////////////////////////
template<typename T>
inline int Stack<T>::size(){return m_size;} template<typename T>
inline bool Stack<T>::empty(){return m_size==?false:true;} template<typename T>
inline T Stack<T>::top(){return m_size!=?m_top->value:T();} template<typename T>
bool Stack<T>::push(const T& t)
{
if(m_size==)
{
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()
{
if(m_size==)
{
T t=m_top->value;
delete m_top;
m_bottom=m_top=NULL;
m_size=;
return t;
}
else if(m_size==)
{
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";
if( m_size== )return ;
else if(m_size<)
{
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;
for(p=m_top,i=;i<;p=p->last,i++)cout<<" |"<<p->value<<"|\n";
for(p=m_bottom,i=;i<;p=p->next,i++);
cout<<" 略...\n";
for(;i>=;i--,p=p->last)
{
if(i==)cout<<"栈底 |"<<p->value<<"|\n";
else cout<<" |"<<p->value<<"|\n";
}
}
}

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

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

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

  2. hdu4699 Editor(双向链表或双栈对弹)

    本题就是两个要点: 1.数据结构的设计.显然可以使用双向链表来做,但是写双向链表的代码复杂度高.其实更好的方法是使用两个对弹的栈来做,而且没必要用STL的栈,就自己开两个数组简单搞一下就好了. 2.最 ...

  3. SDUT OJ 2054 双向链表的实现 (结构体node指针+遍历 *【模板】)

    双向链表 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 学会了单向链表,我们又多了一种解决问题的能力,单链表利用一个指针就能在内 ...

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

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

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

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

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

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

  7. C++学习笔记53:泛型程序设计与C++标准模板库

    泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...

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

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

  9. 【Linux】-NO.87.Assembly.1.滴水逆向.1.001-【介绍】-

    1.0.0 Summary Tittle:[Linux]-NO.87.Assembly.1.滴水逆向.1.001-[基础]- Style:Java Series:Log4j Since:2017-04 ...

随机推荐

  1. JMeter正则表达式-学习(3)

    同时关联多个值的方法: { : ", : "results": : [ : : { : : : "total_earnings":"&quo ...

  2. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

  3. cf 710E dp

    题目链接: http://codeforces.com/problemset/problem/710/E 题意:要输入n个字符'a',有两种操作,一种是输入或删除一个'a',耗时x:另一种是把当前的整 ...

  4. express随记01

    系统变量的设置 app.get(env) | process.env.NODE_ENV: 会自动判断当前环境类型; app.get(port) | process.env.PORT: 必须手动设置; ...

  5. express-5 质量保证(2)

    跨页测试 跨页测试更有挑战性,因为需要你控制和观测浏览器. 现在设置一个跨页测试情境的例子.比如,你的网站上有一个包含联系表单的Request Group Rate页面.营销部门想知道客户是从哪个页面 ...

  6. HTML5优点

    1.标签的改变:<header>, <footer>, <dialog>, <aside>, <figure>, <section&g ...

  7. 20145223《Java程序程序设计》第2周学习总结

    20145223 <Java程序设计>第2周学习总结 教材学习内容总结 一: 1.基本的类型: (1)整数:short(2字节).int(4字节).long(8字节) (2)字节 byte ...

  8. three.js入门3

    为什么要用three.js Three.js为我们封装了底层的WebGl接口,使我们在无需掌握繁冗的图形学知识的基础下可以轻松的创建三维场景.相比较使用底层的WebGL我们可以使用更少的代码,大大的降 ...

  9. ural 1144. The Emperor's Riddle

    1144. The Emperor's Riddle Time limit: 1.0 secondMemory limit: 4 MB Background In the olden times th ...

  10. 原生js添加和删除类

    原生js添加和删除类: this.className +=" "; this.className = this.className.replace(" 原来的类" ...