栈(stack)
- 栈(stack)是一种"操作受限"的线性数据结构,只支持入栈和出栈操作。
- 栈中的元素只能先进后出(First In Last Out)。
- 最早放入的元素位置叫作栈底bottom,最后放入的元素位置叫作栈顶top。
- 经典的应用场景:浏览器前进后退、函数调用栈
下面为链式栈的实现代码:
class Node(object):
def __init__(self, value=None, next=None):
self.value = value
self.next = next
class SingleLinkedStack(object):
def __init__(self):
self.top = None
def push(self, value):
'''入栈:只允许从一侧加入元素,新元素会成为栈顶,时间复杂度为O(1)'''
new_top = Node(value)
new_top.next = self.top
self.top = new_top
def pop(self):
'''出栈:只有栈顶才允许出栈,把最顶端的元素移出,时间复杂度为O(1)'''
if self.top:
value = self.top.value
self.top = self.top.next
return value
def travel(self):
data = []
current = self.top
while current:
data.append(current.value)
current = current.next
return data
if __name__ == "__main__":
stack = SingleLinkedStack()
for i in range(7):
stack.push(i)
message = ''
while message != 'q':
print('''
*************************************************************************************************************
**********************************************请选择相应的序号完成相应的操作************************************
*************************************************************************************************************
** q、退出操作!!!!!! ***
** 1、入栈! ***
** 2、出栈! ***
*************************************************************************************************************
''')
message = input('——————输入下一步要进行的相应操作序号——————:')
if message == 'q':
break
print("——————操作前栈数据:", stack.travel())
if message == '1':
value = input('——————请输入要入栈的数据:')
stack.push(value)
elif message == '2':
stack.pop()
print("——————操作后栈数据:", stack.travel())