diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/stack/CQueue.py b/src/stack/CQueue.py new file mode 100644 index 0000000..89e9620 --- /dev/null +++ b/src/stack/CQueue.py @@ -0,0 +1,62 @@ +# 使用两个栈构建一个队列 +class MinStack(object): + count = 0 + def getCount(self): + return self.count + def __init__(self): + self.stack=[] + def push(self,value): + self.count +=1 + if not self.stack: + self.stack.append((value,value)) + else: + self.stack.append((value,min(value,self.stack[-1][1]))) + def pop(self): + self.count -=1 + self.stack.pop()[0] + def top(self): + return self.stack[-1][0] + def getMin(self): + return self.stack[-1][1] + +class CQueue(object): + def getCount(self): + return self.minStack.getCount() + def __init__(self): + self.minStack = MinStack() + self.tempMinStack = MinStack() + + def appendTail(self, value): + self.minStack.push(value) + def deleteHead(self): + if self.tempMinStack.getCount()!=0: + temp = self.tempMinStack.top() + self.tempMinStack.pop() + return temp + count = self.minStack.getCount() + if count == 0: + return -1 + for i in range(count): + value =self.minStack.top() + self.minStack.pop() + self.tempMinStack.push(value) + temp =self.tempMinStack.top() + self.tempMinStack.pop() + return temp +if __name__ == '__main__': + test = CQueue() + + print(test.deleteHead()) + test.appendTail("5") + test.appendTail("2") + print(test.deleteHead()) + # print(test.getCount()) + print(test.deleteHead()) + # print(test.getCount()) + # test.appendTail("c") + # print(test.getCount()) + # print(test.deleteHead()) + # print(test.getCount()) + # print(test.deleteHead()) + + diff --git a/src/stack/__init__.py b/src/stack/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/stack/binaryTreeNode.py b/src/stack/binaryTreeNode.py new file mode 100644 index 0000000..14640ec --- /dev/null +++ b/src/stack/binaryTreeNode.py @@ -0,0 +1,20 @@ +class Solution(object): + result = [] + i=0 + def inorderTraversal(self, root): + top = root[self.i] + if len(root) == self.i: + return + if root[self.i+1] is not None: + self.result.append(root[self.i+1]) + self.i+=1 + self.inorderTraversal(root) + else: + self.result.append(root[self.i]) + self.i+=2 + self.inorderTraversal(root) +if __name__ == '__main__': + test = Solution() + root = [1, None, 2, 3] + test.inorderTraversal(root) + print(test.result) diff --git a/src/stack/fib.py b/src/stack/fib.py new file mode 100644 index 0000000..b9bf2c8 --- /dev/null +++ b/src/stack/fib.py @@ -0,0 +1,14 @@ +class Solution(object): + def fib(self,n): + a,b = 0,1 + if n <2: + return n + for i in range(n): + if i >=2: + temp = a + a =b + b= temp+b + return (a+b)%1000000007 +if __name__ == '__main__': + solution = Solution() + print(solution.fib(51)) \ No newline at end of file diff --git a/src/stack/minStack.py b/src/stack/minStack.py index 002e2a7..aa6ab57 100644 --- a/src/stack/minStack.py +++ b/src/stack/minStack.py @@ -1,12 +1,17 @@ -class MinStack: +class MinStack(object): + count = 0 + def getCount(self): + return self.count def __init__(self): self.stack=[] def push(self,value): + self.count +=1 if not self.stack: self.stack.append((value,value)) else: self.stack.append((value,min(value,self.stack[-1][1]))) def pop(self): + self.count -=1 self.stack.pop()[0] def top(self): return self.stack[-1][0] @@ -14,10 +19,20 @@ def getMin(self): return self.stack[-1][1] if __name__ == '__main__': test = MinStack() - test.push(-2) - test.push(0) - test.push(-3) + test.push("a") + print(test.getCount()) + test.push("b") + print(test.getCount()) + test.push("c") + print(test.getCount()) + print("test") print(test.getMin()) print(test.pop()) + print(test.getCount()) print(test.top()) - print(test.getMin()) \ No newline at end of file + print(test.getCount()) + print(test.getMin()) + print(test.getCount()) + print(test.pop()) + print(test.getCount()) +