您的位置:首页 > 理论基础 > 数据结构算法

数据结构: 栈

2016-02-09 12:55 731 查看
声明:本文为学习数据结构与算法分析(第三版) Clifford A.Shaffer 著的学习笔记,代码有参考该书的示例代码。

栈,stack,是“LIFO”线性表(后进先出)习惯上有如下称法:

push: 入栈

pop: 弹出

top: 访问栈顶元素

实现方式有顺序栈和链式栈

ADT

template<typename E>
class Stack
{
Stack(const Stack& ) {}
Stack& operator= (const Stack&) {}
public:
Stack() {}
virtual ~Stack() {}
virtual void clear() = 0;
virtual void push(const E& ) = 0;
virtual E pop() = 0;
virtual const E& top() const = 0;
virtual int length() const = 0;
};


顺序栈和链式栈的比较

由于两者的实现都比较简单,所以这里并不讨论,仅说一下两者的比较。

两者所有的操作仅需要常熟时间,从时间效率来看,谁都不占优势。

然而,在链式中,会产生结构式开销(每个元素都有一个指针地址)

当实现多个栈时,可以充分利用顺序栈单向延伸的特性。因此,可以使用一个数组来存储两个栈,每个栈从各自的端点向中间延伸。



然而后实现需要另外写了,不过确实是一个好方法。

所有实现代码均可在github上找到:

xiaosa233的github
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构