python数据结构与算法——栈
2015-07-31 16:33
369 查看
# 栈
# 其实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是很耗时间的
栈可以方便用来判断一个字符串是否回文。
下面是基于栈的回文判断算法
测试:
手动实现栈
# 其实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是很耗时间的
栈可以方便用来判断一个字符串是否回文。
下面是基于栈的回文判断算法
# 判断一个字符串是否回文(plalindrome 不是 Moslems =_=||) # 如果一个字符串是回文的话,它必须是中间对称的 # 将前半部分入栈,再依次出栈,看看能否与mid之后的字符一一匹配 def is_Plalindrome_demo1(A): mid = len(A)/2 # 5/2=2, 4/2=2 stack = [] for i in range(mid): stack.append(A[i]) if len(A)%2 == 0: # 判断字符串的长度是奇数还是偶数 next = mid # 确定后半截字符串的起始下标 else: next = mid + 1 top = mid-1 for i in range(next,len(A)): if stack[top] != A[i]: return False top -= 1 return True
测试:
if __name__=="__main__": q = list("hahahahahahahahaha") print is_Plalindrome_demo1(q)
手动实现栈
# 简单的FILO栈类别 class Stack: def __init__(self): self.top = None # 指向栈顶 self.end = None # 指向栈底 self.count = 0 def push(self,data): if self.end == None: self.end = Node(data) self.top = self.end else: temp = self.top # 保存当前栈顶 self.top = Node(data) self.top.next = temp self.count += 1 def pop(self): if self.top == None: raise "Error: top==None" data = self.top.data self.top = self.top.next self.count -= 1 return data
相关文章推荐
- python数据结构与算法——队列
- 【自考】 数据结构
- python数据结构与算法——链表
- python数据结构与算法——快速排序
- (转)hashmap hashtable 的区别 Hash table 内部的数据结构
- python数据结构与算法——桶排序
- python数据结构与算法——冒泡排序
- python数据结构与算法
- 数据结构上机实验之二分查找 SDUT
- [数据结构] Set的基本用法
- 算法和数据结构
- random_queue:支持push, popRamdom的数据结构
- 数据结构之二叉树排序(转载http://www.cnblogs.com/mcgrady/p/3280624.html)
- 魔术师发牌问题(数据结构)
- 数据结构二:企业级线性链表存储底层封装
- 数据结构---单链表(3)
- 数据结构学习--树(一)
- 数据结构学习--树(一)
- 数据结构实验:哈希表 SDUT
- 数据结构之红黑树(三)——删除操作