1.栈(stack),有进有出,有顺序结构和链表结构。在操作上有进有出,形成了线性结构的关系。
(1)链表结构,在内存上存储的位置可以是一块一块的,通过指针的指向将他们连接在一起。可以灵活运用内存,但算法较为复杂。
(2)顺序结构,是用数组来实现,比较简单,但是数组大小是事先规划好的,大了浪费内存,小了不够用。
2.栈的操作总是在栈顶进行(top),分别使用压入(push)、弹出(pop)操作对数据进行写入和读取。
3.如果用排队来比喻栈,链表结构就是银行的取号排队,顺序结构就是食堂打饭窗口排队。队尾就是栈顶,队尾的那个人走了就是弹出,队尾又来了一个人就是压入,那么那个人就是新的栈顶。
4.实现
(1)用数组实现:数组实现栈
(2)用链表实现:
import numpy as np
class Node():
def __init__(self):
self.data=0#栈首
self.next=None#指向
top=None
def is_empty():
if top==None:
return True
else:
return False
def push(data):
global top
new_data=Node()
new_data.data=data
# print("t0",top)
new_data.next=top#将new_data指向上一个元素,即上一个栈首 将上一个栈首的值赋给new_data.next
# print("t1",top)
top=new_data#将top更新为栈首
# print("t3",top)
# 给栈赋一些值用于测试
for i in range(10):
# print(i)
# print()
push(np.random.randint(1,10))
def show_element():
global top
temp_list=[]
while top!=None:
ptr = top
temp = ptr.data
temp_list.append(temp)
top = top.next
print(temp_list)
temp_list.reverse()
for data in temp_list:
push(data)
def pop():
global top
if is_empty():
print("空栈,弹出失败")
else:
ptr=top
temp=ptr.data
top=top.next
print(temp)
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()