本来打算是从C语言的数据结构学起的,但是由于对C语言遗忘过多,于是作罢,开始转向Python 数据结构算法了。而且在未来大数据处理中,Python语言会展现得天独厚优势呢——独白
栈【stack】: 是数据结构的一种,若是对栈中的元素访问,必须从栈顶开始,是一种后进先出的数据结构。所以,任何不在栈顶的元素都无法访问,为了得到栈底元素,必须着个拿掉栈顶元素
在python 中对栈的操作有两个 压栈(push)和弹栈(pop)这两个都是Python中的内置函数pop()还有一个常见的操作是预览栈顶元素。peek() 方法只能返回栈顶原素,而不能删除它。
为了记录栈顶元素的位置,同时为了标记哪里可以加入新元素。。我们使用top,当向栈内压入元素,该变量增大,弹出元素,变量减小。
模拟stack 主函数执行stack的通常操作
Stack(): 建立一个空的栈对象
push() :把一个元素添加到栈顶
pop(): 删除最顶层,并返回这个元素
peek() : 返回最顶层,但不删除它
isEmpty() : 判断栈是否为空
size() : 返回栈中的元素
eg 1: 栈的应用之平衡圆括号
比如我们在计算机输入(9+1)X(2+8)/(3+7)
上图了匹配‘(’
栈的应用进制转换
在计算机中进制之间的转换从未停止,大都是十进制1二进制之间的转换
十进制转换二进制 ----- 除二取余法
这种算法从一个大于 0 的整数开始,通过递归法连续除以 2,并保存除 2 得到的余数。第一次除以 2 可以判断这个数是偶数还是奇数。偶数除以 2 的余数是 0,这个二进制位就 0;奇数除以 2 的余数是 1,这个位就是 1。这样连续相除得到一串的 0 或 1,第 1 次得到的位实际是最后一位。如图 5 所示,我们又一次见到了需要反转顺序的性质,这就表明需要利用栈的特性来解决问题了。
除二取余divideby代码块Python代码
反序代码块 是调用内置函数。这个代码是在com.python.Stack中写的 不在同一代码块中,但也可以写在同一代码块中
结果 1x2^5+0x2^4+1x2^3+0x2^2+1x2^1+0X2^0=42
网友评论