栈结构
Stack是一种线性存储结构,特点:先进后出,只能在栈顶进行插入和删除。
node.py
class Node:
def __init__(self,value):
self.value = value
self.pre = Node # 指向前一个节点的指针
stack.py
from node import Node
class Stack:
def __init__(self):
self.point = None
self.length = 0
def push(self,value):
node = Node(value)
if self.point!= None:
node.pre = self.point
self.point = node
else:
self.point = node
self.length += 1
def pop(self):
if self.point!= None:
node = self.point
self.point = node.pre
node.pre = None
self.length -= 1
return node.value
else:
return None
def isNone(self):
if self.length > 0:
return False
else:
return True
栈的应用:十进制转二进制
示例1:
from stack import Stack
import math
def ten_to_tow(n):
if n > 1:
stack = Stack()
temp = n
while(temp>0):
mod = temp % 2
stack.push(mod)
temp = math.floor(temp/2)
v = stack.pop()
while(stack.isNone()==False):
v = v*10+stack.pop()
return v
else:
return n
print(ten_to_tow(6))
示例2:
from stack import Stack
import math
def ten_to_two(n):
stack=Stack()
while (n>0):
mod = n % 2
stack.push(mod)
n = math.floor(n/2)
for i in range(stack.length):
v=stack.pop()
print(v,end='')
ten_to_two(9)
最小栈
from node import Node
class MinStack:
def __init__(self):
self.point = None
self.length = 0
def push(self,value):
node = Node(value)
if self.point!= None:
if node.value>self.point.value:
minV=self.pop()
self.add(node)
self.length += 1
self.add(Node(minV))
else:
self.point = node
self.length += 1
def add(self,node):
node.pre = self.point
self.point = node
def pop(self):
if self.point!= None:
node = self.point
self.point = node.pre
node.pre = None
self.length -= 1
return node.value
else:
return None
def isNone(self):
if self.length > 0:
return False
else:
return True