链栈的实现2 #
- 数据出栈的实现
- 链栈的实现
数据出栈的实现 #
栈数据的出栈比进站相比,需要首先判断该栈是否是空栈,定义isempty()函数实现该功能,只需判断栈顶指针是否为空即可
数据出栈时需要首先将出栈的元素保存下来用于返回,其次更新顶部指针,将顶部指针指向下一数据,最后将栈顶数据删除即可。注意栈顶元素删除的方法
def isempty(self): return(self.top==None) #判断栈顶指针是否为空 def pop(self): if(self.isempty()): print("the stack is empty now!!!") else: temp=self.top.data #将栈尾数据临时保存 self.top=self.top.next #更新顶部指针 self.top.next=None #将栈顶数据节点删除 return temp #返回栈尾数据
链栈的实现 #
链栈类的整体实现如下,包含了数据进栈,数据出栈的基本方法,数据出栈与进栈是两个相反的过程,注意对比push()函数与pop()函数的区别
class Node: def __init__(self, data): self.data = data # 用于存储数据 self.next = None # 用于指向下一数据 class Stack: def __init__(self): self.top = None def push(self, data): push_node = Node(data) # 构造一个节点数据 push_node.next = self.top # 将数据节点指针插入栈尾部(2) self.top = push_node # 更新顶部指针(3) def isempty(self): return(self.top==None) def pop(self): if(self.isempty()): print("the stack is empty now!!!") else: temp=self.top.data #将栈尾数据临时保存 self.top=self.top.next #更新顶部指针 self.top.next=None #将栈顶数据节点删除 return temp #返回栈尾数据 def __str__(self): #重载__str__()函数用于,用于print()打印 if(self.isempty()): return("This is a stack structure\n"+\ "the stack is empty now!!!") else: return("This is a stack structure\n"+\ "the top data is "+str(self.top.data)) mystack1=Stack() #实例化一个栈结构 mystack1.push(3) #进站 mystack1.push([2,1]) #进站 print(mystack1) pop_value=mystack1.pop() #出站 print(pop_value) print(mystack1)
小结 #
习题 #
- 给上述的栈结构加入一个实例变量length,用来存贮栈的长度
- 详细描述一下栈顶部元素出栈的细节,并绘制其过程