zoukankan      html  css  js  c++  java
  • python数据结构与算法——栈

    # 栈
    # 其实python里面的list就可以当栈使用啦,用collections.deque也可以
    # 1. 入栈 list.append(item)
    # 2. 出栈 item = list.pop()
    # 3. 对于首元素出栈,还可以 item = list.pop(0) 和队列概念一样
    # 4. 其实还可以任意元素出栈 item = list.pop(i) 相当于删除第i个元素
    # 注意3,4是很耗时间的

    栈可以方便用来判断一个字符串是否回文。

    下面是基于栈的回文判断算法

     1 # 判断一个字符串是否回文(plalindrome 不是 Moslems =_=||)
     2 # 如果一个字符串是回文的话,它必须是中间对称的
     3 # 将前半部分入栈,再依次出栈,看看能否与mid之后的字符一一匹配
     4 
     5 def is_Plalindrome_demo1(A):
     6     mid = len(A)/2              # 5/2=2, 4/2=2
     7     stack = []
     8     for i in range(mid):
     9         stack.append(A[i])
    10     
    11     if len(A)%2 == 0:           # 判断字符串的长度是奇数还是偶数
    12         next = mid              # 确定后半截字符串的起始下标
    13     else:
    14         next = mid + 1
    15 
    16     top = mid-1
    17     for i in range(next,len(A)):
    18         if stack[top] != A[i]:
    19             return False
    20         top -= 1
    21     
    22     return True

    测试:

    if __name__=="__main__":
    
        q = list("hahahahahahahahaha")
        print is_Plalindrome_demo1(q)

    手动实现栈

     1 # 简单的FILO栈类别
     2 class Stack:
     3     def __init__(self):
     4         self.top = None                 # 指向栈顶
     5         self.end = None                 # 指向栈底
     6         self.count = 0
     7         
     8     def push(self,data):
     9         if self.end == None:
    10            self.end = Node(data)
    11            self.top = self.end
    12         else:
    13             temp = self.top             # 保存当前栈顶
    14             self.top = Node(data)
    15             self.top.next = temp
    16         self.count += 1
    17     
    18     def pop(self):
    19         if self.top == None:
    20             raise "Error: top==None"
    21         data = self.top.data
    22         self.top = self.top.next
    23         self.count -= 1
    24         return data
  • 相关阅读:
    Intellij IDEA 使用spring-boot-devtools无效解决办法一
    使用docker安装myql/redis等软件
    mybatis generator插件系列--分页插件
    mybatis generator插件系列--lombok插件 (减少百分之九十bean代码)
    linux设置端口转发(一键设置)
    redis教程(The little redis book中文版)
    Redis 5种数据结构及其使用场景举例--STRING
    String中hashCode方法的线程安全
    java ShutdownHook介绍与使用
    ACM 模板库
  • 原文地址:https://www.cnblogs.com/hanahimi/p/4692523.html
Copyright © 2011-2022 走看看