用链表来实现堆栈的优点是随时可以动态改变链表的长度,能够有效利用内存资源,缺点就是设计的算法比较复杂
class Node: #堆栈链结节点的声明 def __init__(self): self.data=0 #堆栈数据的声明 self.next=None #堆栈中用来指向下一个节点 top=None
判断链表是否为空
def isEmpty(): global top if(top==None): return 1 else: return 0
将指定的数据压入堆栈
#将指定的数据压入堆栈 def push(data): global top new_add_node=Node() new_add_node.data=data #将传入的值指定为节点的内容 new_add_node.next=top #将新节点指向堆栈的顶端 top=new_add_node #新节点成为堆栈的顶端
从堆栈弹出数据
#从堆栈弹出数据 def pop(): global top if isEmpty(): print('===目前为空堆栈===') return -1 else: ptr=top #指向堆栈的顶端 top=top.next #将堆栈顶端的指针指向下一个节点 temp=ptr.data #弹出堆栈的数据 return temp #将从堆栈弹出的数据返回给主程序
再来看一个例子用链表实现堆栈操作
#主程序 while True: i=int(input('要压入堆栈,请输入1,要弹出则输入0,停止操作则输入-1: ')) if i==-1: break elif i==1: value=int(input('请输入元素值:')) push(value) elif i==0: print('弹出的元素为%d' %pop()) print('============================') while(not isEmpty()): #将数据陆续从顶端弹出 print('堆栈弹出的顺序为:%d' %pop()) print('============================')