数据结构 - 1 线性表 - 4 栈 - python

栈

栈的操作

  • Stack.peek():返回栈顶元素。
  • Stack.push(x):向栈中添加元素x
  • Stack.pop():返回并删除栈顶元素的。
  • Stack.isEmpty():返回栈是否为空。
  • Stack.length():返回栈的长度。
  • Stack.traversal():遍历栈。

顺序栈(数组实现栈)

采用顺序存储结构的栈称为顺序栈,通过一维数组用一片地址连续的存储空间来存储栈的元素,并指定栈顶位于序列末端。当有新元素入栈或栈顶元素出栈我们只需要改变栈顶位标即可。

class Stack:
    def __init__(self):
        self.data = []
    
    # 返回栈顶元素
    def peek(self):
        return self.data[-1]
    
    # 进栈
    def push(self, data):
        self.data.append(data)
        
    # 出栈    
    def pop(self):
        return self.data.pop()
    
    # 返回栈是否为空
    def isEmpty(self):
        return self.data == []
    
    # 返回栈的长度
    def length(self):
        return len(self.data)
    
    # 遍历栈
    def traversal(self):
        print(*self.data)

测试:

s=Stack()

print("是否为空:",s.isEmpty()) # True
s.traversal() # 
print("-----------------")
s.push(4) 
s.push('dog')
print(s.peek()) # dog
s.traversal() # 4 dog
print("-----------------")
s.push(True) 
s.traversal() # 4 dog True
print("-----------------")
print("长度:",s.length()) # 3
print("-----------------")
print("是否为空:",s.isEmpty()) # False
print("-----------------")
s.push(8.4) 
s.traversal() # 4 dog True 8.4
print("-----------------")
print(s.pop()) # 8.4
s.traversal() # 4 dog True
print("-----------------")
print(s.pop()) # True
s.traversal() # 4 dog
print("-----------------")
print("长度:",s.length()) # 2
print("-----------------")

链栈(链表实现栈)

因为栈只通过栈顶来做插入和删除操作,所以比较好的方法是将栈顶放在单链表的头部,栈顶指针和单链表的指针合二为一。

class Stack:
    def __init__(self):
        self.top = None
    
    # 返回栈是否为空
    def isEmpty(self):
        return self.top is None
    
    # 返回栈顶元素
    def peek(self):
        return self.top.data
    
    # 进栈
    def push(self, data):
        node = Node(data)
        node.next = self.top
        self.top = node
    
    # 出栈 
    def pop(self):
        temp = self.top
        self.top = self.top.next
        return temp.data
    
    # 遍历栈
    def traversal(self):
        current = self.top
        while current is not None:
            print(current.data, end=' ')
            current = current.next
        print()
    
    # 返回栈的长度
    def length(self):
        count = 0
        current = self.top
        while current is not None:
            count += 1
            current = current.next
        return count

测试:

s=Stack()

print("是否为空:",s.isEmpty()) # True
s.traversal() # 
print("-----------------")
s.push(4) 
s.push('dog')
print(s.peek()) # dog
s.traversal() # dog 4
print("-----------------")
s.push(True) 
s.traversal() # True dog 4
print("-----------------")
print("长度:",s.length()) # 3
print("-----------------")
print("是否为空:",s.isEmpty()) # False
print("-----------------")
s.push(8.4) 
s.traversal() # 8.4 True dog 4
print("-----------------")
print(s.pop()) # 8.4
s.traversal() # True dog 4
print("-----------------")
print(s.pop()) # True
s.traversal() # dog 4
print("-----------------")
print("长度:",s.length()) # 2
print("-----------------")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值