您的位置:首页 > 理论基础 > 数据结构算法

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是很耗时间的

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

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

# 判断一个字符串是否回文(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: