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 ...
随机推荐
- Liferay 6.2 改造系列之十七:当Portlet无权限时,不显示错误信息
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Set this to true if users are shown ...
- json数据实际应用
JSON序列化输出 var xiaoming = { name: '小明', age: 14, gender: true, height: 1.65, grade: null, 'middle-sch ...
- [工作中的设计模式]观察者模式observer
一.模式解析 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式又叫订阅发布模式, ...
- Lost Cows
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9669 Accepted: 6228 Description N (2 ...
- MongoDB 入门之基础 DDL
此文章主要记录部分主要的 MongoDB 的 DDL 操作. db 查看当前所在的数据库(默认 test) > db test > show dbs 查看当前数据库服务器上的数据库名字 ...
- Mvc网站发布到IIS
网站发布步骤: 这部分是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接 ...
- unity 解析tmx 2
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; usin ...
- Storm可靠性实例解析——ack机制
对于Storm,它有一个很重要的特性:“Guarantee no data loss” ——可靠性 很显然,要做到这个特性,必须要track每个data的去向和结果.Storm是如何做到的呢——ack ...
- Oracle存储过程中临时表的使用技巧
一.Oracle临时表知识 在Oracle中,临时表分为SESSION(会话级).TRANSACTION(事务级)两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSIO ...
- BZOJ 1901 & 整体二分
题意: 带修改的区间第K小. SOL: 看了很久很久很久很久的整体二分,网上的各种题解也不是很多,也一直很不了解所谓的"贡献","将询问一起递归"是什么意思.. ...