1.栈(stack),有进有出,有顺序结构和链表结构。在操作上有进有出,形成了线性结构的关系。
(1)链表结构,在内存上存储的位置可以是一块一块的,通过指针的指向将他们连接在一起。可以灵活运用内存,但算法较为复杂。
(2)顺序结构,是用数组来实现,比较简单,但是数组大小是事先规划好的,大了浪费内存,小了不够用。
2.栈的操作总是在栈顶进行(top),分别使用压入(push)、弹出(pop)操作对数据进行写入和读取。
3.如果用排队来比喻栈,链表结构就是银行的取号排队,顺序结构就是食堂打饭窗口排队。队尾就是栈顶,队尾的那个人走了就是弹出,队尾又来了一个人就是压入,那么那个人就是新的栈顶。
4.代码实现
(1)链表实现:链表实现栈
(2)数组实现:
import numpy as np
max_stack=100#最大的栈长
global stack
stack=[None]*max_stack
# Stack[0]=0#栈底
top=-1#栈顶
def is_empty():
if top==-1:
return True
else:
return False
def show_element():
global max_stack
global stack
# for i in range(max_stack):
# print(stack[i])
print(stack)
def push(data):
# 判断是否已经超出最大栈长,再将数据入栈
global max_stack
global stack
global top
if top>=max_stack:
print("top={}栈满,入栈失败".format(top))
else:
top += 1
stack[top]=data
def pop():
global max_stack
global stack
global top
if is_empty():
print("空栈,弹出数据失败")
else:
print(stack[top])
top-=1
# '__main__':
for i in range(10):
stack[i]=np.random.randint(1,10)
top+=1
print("当前栈的使用情况:",stack)
operate=4
while operate!=0:
print("入栈操作请输入1,出栈操作请输入2,查看当前栈的使用情况请输入3,结束请输入0")
operate=int(input("输入:"))
if operate==1:
data=int(input("输入入栈的数值:"))
push(data)
elif operate==2:
pop()
elif operate==3:
show_element()
4.代码运行效果: