c++用双向链表实现模板栈
可直接编译运行,其中方法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++用双向链表实现模板栈的更多相关文章
- ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)
本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...
- hdu4699 Editor(双向链表或双栈对弹)
本题就是两个要点: 1.数据结构的设计.显然可以使用双向链表来做,但是写双向链表的代码复杂度高.其实更好的方法是使用两个对弹的栈来做,而且没必要用STL的栈,就自己开两个数组简单搞一下就好了. 2.最 ...
- SDUT OJ 2054 双向链表的实现 (结构体node指针+遍历 *【模板】)
双向链表 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 学会了单向链表,我们又多了一种解决问题的能力,单链表利用一个指针就能在内 ...
- 栈的图文解析 和 对应3种语言的实现(C/C++/Java)
概要 本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例.注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈.内容包括:1. 栈的介绍2. 栈的C实现3. 栈的 ...
- 栈的图文解析 和 对应3种语言的实现(C/C++/Java)【转】
概要 本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例.注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈.内容包括:1. 栈的介绍2. 栈的C实现3. 栈的 ...
- 栈 - 从零开始实现by C++
参考链接:数据结构探险-栈篇 学了队列之后,栈就很简单了,换汤不换药. 栈 栈的模型 后进先出(电梯,进制转换,括号的匹配检测) 栈的基本元素 栈顶,栈底(一般很少用到),栈容量,栈长度 注意 ...
- C++学习笔记53:泛型程序设计与C++标准模板库
泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...
- 你是否决绝平庸,你有勇气来学C/C++吗,有勇气来检验你是否经得起世界五百强的面试
如果你来传智播客学习 你的目标就是要积累工作经验 有机会参加世界五百强的面试 秒杀世界五百强的面试 赢得高薪的offer! C/C++课程大纲 C语言3周21天 完全掌握C语言的本质,成为一名合 ...
- 【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 ...
随机推荐
- 动态平衡二叉搜索树的简易实现,Treap 树
http://blog.csdn.net/qichi_bj/article/details/8232048
- kafka producer源码
producer接口: /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor l ...
- SQL单表查询案例
表(emp)结构 (1)查询部门编号为10中所有经理,部门编号为20中所有销售员,还有即不是经理又不是销售员但其工资大或等于20000的所有员工详细资料. SELECT * FROM emp ; (2 ...
- android MPAndroidChart饼图实现图例后加数字或文本(定制图例)
转载请注明:http://blog.csdn.net/ly20116/article/details/50905789 MPAndroidChart是一个非常优秀的开源图表库,MPAndroidCha ...
- 本人经过测试认为最简单最好的popupwindow样式
<shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- solid 设置 ...
- strcmp函数的使用
Action() { /********************************* * Author:旺仔 * object:strcmp * date:2015-12-09 ...
- Linux IO模型和网络编程模型
术语概念描述: IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者. 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待. 以文件IO为例,一个IO读过程是文件 ...
- nodejs随记02
Basic认证 检查报文头中Authorization字段,由认证方式和加密值构成: basic认证中,加密值为username:password,然后进行Base64编码构成; 获取username ...
- jQuery下操作dropdownlist
dropdownlist呈现到html中如下: <select id="ddlOrg" name="ddlOrg"> <option ...
- Spring Data JPA 查询方法支持的关键字
Table 2.3. Supported keywords inside method names Keyword Sample JPQL snippet And findByLastnameAndF ...