数据结构与算法·其七
栈
栈的抽象数据类型
顺序栈的抽象类型
1 | #define MAXSIZE 100 |
顺序栈的一些算法
- 判断是否为空
- S.top == S.base ? true : false;
- 栈长度
- return S.top-S.base;
- 清空栈
- if(S.base){S.top=S.base}
- 删除栈
- if(S.base){delete S.base; S.stacksize=0;S.base=S.top=Null}
- 压栈
- 判断是否满了->栈顶上移,写入e(*S.top=e;S.top++;)
- 出栈
- 判断是否为空->获取栈顶元素->栈顶下移
链栈的抽象数据类型
只能在链表头部进行操作的特殊链表
特点:
- 不需要头节点
- 头指针就是栈顶
- 空栈就是头指针指向空
- 插入和删除仅发生在栈顶
算法
- 入栈
- 新建一个节点,指针域指向上次的栈顶,修改栈指针
- 出栈
- 头指针指向下一位,返回上次的*S.top
栈与递归
递归
如果一个对象部分地指向自身,或用自己给自己定义,那么他就是递归的
如果一个过程直接的或者间接的调用自身,那这个过程是递归的过程
递归工作栈
在函数嵌套调用或者递归时,所有进行中的函数都被保存在栈内存中
递归的优缺点
- 优点是程序简洁易读
- 缺点是每次调用要生成记录,保存状态信息,稍后要取出状态信息,时间开销大。