可直接编译运行,其中方法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. barabasilab-networkScience学习笔记6-evolving networks

    第一次接触复杂性科学是在一本叫think complexity的书上,Allen博士很好的讲述了数据结构与复杂性科学,barabasi是一个知名的复杂性网络科学家,barabasilab则是他所主导的 ...

  2. UVA136 求第1500个丑数

    枚举大范围数据..暴力检查题目条件 #include <iostream> #include <cstdio> #include <vector> #include ...

  3. CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想

    http://codeforces.com/problemset/problem/735/D 题意是..一个数n的贡献是它的最大的因子,这个因子不能等于它本身 然后呢..现在我们可以将n拆成任意个数的 ...

  4. LoadRunner参数化之数据取值和更新方式

    其实看LR已经很久了,每次看到参数化的取值更新时,都没有看透,了解个大概就为止了,也确实挺搞脑子的. 现在理解下来 分成2部分 取值方式  Select next row 如何从数据列表中取值 Seq ...

  5. supervisor(一)基础篇

    这两天干的活,是让楼主写一个supervisor的listener,用来监控supervisor所管理子进程的状态,当子进程异常退出时,楼主写的这个listener将会触发报警.在这里总结下super ...

  6. Understanding, Operating and Monitoring Apache Kafka

    Apache Kafka is an attractive service because it's conceptually simple and powerful. It's easy to un ...

  7. 解决ScrollView嵌到listView冲突问题

    方法一: 把下面的方法放在绑定适配器操作的下面就行. /** * 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 * @ ...

  8. 车销 商场 批发零售无线POS开单 智能POS开单打印 开单APP应用-云POS扫描打印一体方案

    PDA数据采集器,是一款移动手持开单设备,它通过WIFI和GPRS连接并访问电脑,从进销存软件中读取数据,实现移动开单,打破电脑开单模式. 它自带扫描器,可直接扫描条码来查找产品,且功能强大.操作简单 ...

  9. CentOS7安装docker出错(Transaction check error)

    1. 出错内容: Transaction check error: :-.el7_2..x86_64 conflicts with :-.el7.x86_64 :-.el7_2..x86_64 con ...

  10. 【原】iOS学习之卸载Openfire

    在即时通信编程中,你的Openfire服务可能因为各种不同的原因,出现不能使用.无法连接等问题. 解决这类问题最直接和省时间的方式就是卸载后重装,本篇主要为大家介绍如何卸载Openfire. 首先,确 ...