数据结构及算法(Python)---栈

   1、数据存储方式:可以采用列表或单链表
   2、操作:
      Stack() 创建一个新的空栈
      push(data) 添加一个新的元素data到栈顶
      pop() 弹出栈顶元素
      peek() 返回栈顶元素
      is_empty() 判断栈是否为空
      size() 返回栈的元素个数
"""
   采用列表存储的方式
"""

class Stack(object):
    """栈"""
    def __init__(self):
        """初始化"""
        self.__list = []      # 定义一个列表用于存放数据

    def push(self, data):
        """添加一个新的元素data到栈顶"""
        self.__list.append(data)    # 把列表的尾部作为栈顶

    def pop(self):
        """弹出栈顶元素"""
        return self.__list.pop()    # 从列表尾部出栈操作

    """
        也可以把列表头部作为栈顶,如果把列表头部作为栈顶,
        则压栈就是 self.__list.insert(0, data),
        出栈则是self.__list.pop(0)
        此种方式与把列表尾部作为栈顶区别在于,列表尾部操作时间复杂度是O(1),而头部操作时间复杂度是O(n)
    """
    def peek(self):
        """返回栈顶元素"""
        if self.__list:           # 列表为空时,返回None,否则返回最后一个元素
            return self.__list[-1]
        else:
            return None

    def is_empty(self):
        """判断栈是否为空"""
        return not self.__list    # 列表为空时,返回True,否则返回False

    def size(self):
        """返回栈的元素个数"""
        return len(self.__list)

if __name__ == '__main__':
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(4)
    print("栈顶数据:", s.peek())
    print("判空:", s.is_empty())
    print("长度:", s.size())

    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print("栈顶数据:", s.peek())
    print("判空:", s.is_empty())
    print("长度:", s.size())

执行结果

栈顶数据: 4
判空: False
长度: 4
4
3
2
1
栈顶数据: None
判空: True
长度: 0
"""
   采用单链表存储的方式
"""
import SingleLinkList

class Stack(object):
    """栈"""
    def __init__(self):
        """初始化"""
        self.__sll = SingleLinkList()   # 定义一个链表用于存放数据

    def push(self, data):
        """添加一个新的元素data到栈顶"""
        self.__sll.add(data)            # 把链表的头部作为栈顶

    def pop(self):
        """弹出栈顶元素"""
        data = self.peek()             # 获取栈顶的元素
        if data:
            self.__sll.remove(data)    # 删除栈顶的元素
        return data                    # 把链表的头部作为栈顶

    def peek(self):
        """返回栈顶元素"""
        return self.__sll.index(0)    # 直接返回首节点的元素
        # return self.__sll._SingleLinkList__head.data    # 可以通过实例访问类的私有变量

    def is_empty(self):
        """判断栈是否为空"""
        return self.__sll.is_empty()   # 直接返回链表判空结果 True空

    def size(self):
        """返回栈的元素个数"""
        return self.__sll.length()   # 直接返回链表的长度

if __name__ == '__main__':
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(4)
    print("栈顶数据:", s.peek())
    print("判空:", s.is_empty())
    print("长度:", s.size())

    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print("栈顶数据:", s.peek())
    print("判空:", s.is_empty())
    print("长度:", s.size())

执行结果

栈顶数据: 4
判空: False
长度: 4
4
3
2
1
栈顶数据: None
判空: True
长度: 0
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构算法Python讲义》是一本介绍数据结构算法的教材,它使用Python语言作为教学工具,旨在帮助读者理解和掌握这两个重要的计算机科学领域。 这本讲义首先介绍了数据结构的概念和基本知识,如数组、链表、、队列和树等。对于每种数据结构,讲义都详细说明了其定义、特点和常见操作,并通过实例和代码演示了它们的使用方法。此外,讲义还探讨了如何选择合适的数据结构来解决实际问题,并讨论了不同数据结构之间的比较和权衡。 在介绍完数据结构后,讲义转向算法的讲解。它首先讲解了算法的基本概念和特性,如时间复杂度和空间复杂度,然后深入讲解了常见的算法设计技巧,如递归、分治法、贪心算法和动态规划。对于每种算法,讲义都给出了详细的原理解释和代码实现,并通过实例和练习题帮助读者理解和掌握。 此外,讲义还包含了一些高级主题,如图算法、排序算法和搜索算法。它详细讲解了图的表示方式和常见的图算法,如深度优先搜索和广度优先搜索。对于排序算法,讲义介绍了常见的排序算法,如冒泡排序、插入排序和快速排序,并给出了它们的实现代码。此外,讲义还探讨了搜索算法,如二分搜索和回溯算法,并通过实例说明它们的应用。 总的来说,《数据结构算法Python讲义》通过简洁明了的语言和丰富的实例,帮助读者理解和掌握数据结构算法的基本概念和技巧。无论是初学者还是有一定基础的读者,都可以从中受益,提高编程能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值