数据基础结构栈
栈是一种存储数据的结构,栈中的元素底端越近,代表其在栈中的时间越长。最新添加的元素将被最先移除。这种排序原则被称作LIFO(last-in first-out),也就是后进先出
我们可以把栈想象成一个容器,我们往里面放东西,一层一层堆叠,然后你从容器中取出东西时,从最顶部开始取,底部我们称作栈底,顶部称作栈顶
栈的方法:
Stack() 创建一个空栈。不需要参数,会返回一个空栈;
push(item)将一个元素添加至栈的顶端,需要一个参数item,无返回值;
pop()将顶端元素移除。不需要参数,返回移除的元素,并且修改栈的内容;
peek()返回栈顶端的元素,但是不移除该元素。不需要参数,不会修改栈的内容;
isEmpty()检查栈是否为空,不需要参数,会返回一个布尔值;
size()返回栈中的数目,不需要参数,会返回一个整数;
用Python实现栈
class Stack(object):
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items) - 1]
def size(self):
return len(self.items)
s = Stack()
print(s.isEmpty())
s.push(4)
s.push('dog')
print(s.isEmpty())
print(s.size())
print(s.pop())
print(s.peek())
结果:
True
False
2
dog
4
栈的应用
例子:将十进制数转换成二进制数
比如:3 ——>11 6——>110
def DectoBin(decNumber):
remstack = Stack()
while decNumber > 0:
rem = decNumber % 2
remstack.push(rem)
decNumber = decNumber // 2
binString = ""
while not remstack.isEmpty():
binString = binString + str(remstack.pop())
return binString
print(DectoBin(10))
print(DectoBin(100))
print(DectoBin(6))
结果:
1010
1100100
110
分析:我们每次对一个整数进行循环的除以2,如果有余数,就放在转化出来的二进制数的最后一位,依次类推,刚好符合栈的结构,只要我们每次把求余的数依次存放在栈里,然后再从栈里把数据拿出来,就是我们需要的结果。