Task2
【栈】
- 用数组实现一个顺序栈
- 用链表实现一个链式栈
【队列】
- 用数组实现一个顺序队列
- 用链表实现一个链式队列
'''顺序栈'''
class ArrayStack(object):
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
return self.stack.pop()
def is_empty(self):
return self.stack == []
def peek(self):
if self.is_empty():
return None
return self.stack[-1]
def size(self):
return len(self.stack)
'''链栈'''
class Node(object):
def __init__(self, data):
self.data = data
self.next = None
class LinkStack(object):
def __init__(self):
self.node = Node(None)
self.head = self.node
self.size = 0
def is_empty(self):
return self.size == 0
def get_size(self):
return self.size
def push(self, data):
node = Node(data)
node.next = self.head.next
self.head.next = node
self.size += 1
def pop(self):
if not self.is_empty():
current_node = self.head.next
if self.get_size() == 1:
self.head.next = None
else:
self.head.next = self.head.next.next
self.size -= 1
return current_node.data
else:
raise IndexError("pop from empty stack")
def top(self):
if not self.is_empty():
return self.head.next.data
else:
raise IndexError("stack is empty")
'''顺序队列'''
class ArrayQueue(object):
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0, item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
'''链队列'''
class Node(object):
def __init__(self, data):
self.data = data
self.next = None
class LinkStack(object):
def __init__(self):
self.node = Node(None)
self.head = self.node
self.size = 0
def is_empty(self):
return self.size == 0
def get_size(self):
return self.size
def push(self, data):
node = Node(data)
node.next = self.head.next
self.head.next = node
self.size += 1
def pop(self):
if not self.is_empty():
current_node = self.head.next
if self.get_size() == 1:
self.head.next = None
else:
self.head.next = self.head.next.next
self.size -= 1
return current_node.data
else:
raise IndexError("pop from empty stack")
def top(self):
if not self.is_empty():
return self.head.next.data
else:
raise IndexError("stack is empty")
'''斐波那契数列'''
def fib_recur(n):
assert n >= 0, "n > 0"
if n <= 1:
return n
return fib_recur(n-1) + fib_recur(n-2)
for i in range(1, 20):
print(fib_recur(i), end=' ')
'''阶乘'''
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
number = int(input("请输入一个正整数:"))
result = factorial(number)
print("%d 的阶乘是 %d" % (number, result))