数据结构 笔记:栈的概念及实现

栈的定义

-栈是一种特殊的线性表

-栈仅能在线性表的一端进行操作

·栈顶(Top):允许操作的一端

·栈底(Bottom):不允许操作的一段

栈的特性

-后进先出

栈的操作

-创建栈(Stack())

-销毁栈(~Stack())

-清空栈(clear())

-进栈(push())

-出栈(pop())

-获取栈顶元素(top())

-获取栈的大小(size())

template <typename T>
class Stack : public Object
{
public:
    virtual void push(const T& e) = 0;
    virtual void pop() = 0;
    virtual T top() const = 0;
    virtual void clear() = 0;
    virtual int size() const = 0;
};

StaticStack设计要点

-类模板

·使用原生数组作为栈的存储空间

·使用模板参数决定栈的最大容量

template <typename T,int N>
class StataicStack : public Stack<T>
{
protected:
    T m_space[N];            //栈存储空间,N为模板参数
    int m_top;               //栈顶标识
    int m_size;              //当前栈的大小
public:
    StaticStack();           //初始化成员变量
    int capacity() const;
    //...
};

-栈是一种特殊的线性表

-栈只允许在线性表的一端进行操作

-StaticStack使用原生数组作为内存存储空间

-StaticStack的最大容量由模板决定

链式栈的设计要点

-类模板,抽象父类Stack的直接子类

-在内部组合使用LinkList类,实现栈的链式存储

-只在单链表成员对象的头部进行操作

栈的应用实践

-符号匹配问题

·在C语言中有一些成对匹配出现的符号

~括号:(),[] ,{},<>

~引号:' ' ," "

算法思路

-第一个字符开始扫描

·当遇见普通字符时忽略

·当遇见左符号时压入栈中

·当遇见右符号时弹出栈顶符号,并进行匹配

-结束

·成功:所有字符臊面完毕,且栈为空

·失败:匹配失败或所有字符臊面完毕但栈非空

Stack栈实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值