作者: Amica | 来源:发表于2018-08-03 16:29 被阅读11次

之前总结的队列是一种先进先出的数据结构,今天要总结的是一种后进先出的数据结构,也就是栈。
栈(Stack)我们又称之为堆栈,它是一种运算受限的线性表,仅允许在表的一端进行插入和删除操作。我们把允许进行插入和删除的这一端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。

示意图.png

python实现栈

#定义一个类
#coding=utf-8
class Stack(object):
    # 初始化栈为一个空列表
    def __init__(self):
        self.items = []

    # 判断栈是否为空,返回布尔值
    def is_empty(self):
        return self.items == []

    # 返回栈顶元素
    def peek(self):
        return self.items[len(self.items) - 1]

    # 返回栈的大小
    def size(self):
        return len(self.items)

    # 新的元素入栈
    def push(self, item):
        self.items.append(item)

    # 栈顶元素出栈
    def pop(self):
        return self.items.pop()

栈的应用-----解密回文

这里我们需要判断一个字符串是否是回文字符串,所谓的回文字符串是指正读和反读均相同的字符序列,比如'cssc','sqqqs','好不好'均是回文,通过栈我们很容易判断一个字符串是否是回文。

#定义函用于判断字符串是否是回文
def Is_Plalindrome(mychar):
    my_stack = Stack()
    lenth=len(mychar)
    mid=int((lenth/2))-1
    for i in mychar[0:mid+1]:
        my_stack.push(i)
    if lenth%2==0:
        nextone=mid+1
    else:
        nextone=mid+2
    for j in mychar[nextone:]:
        if j==my_stack.peek():
            my_stack.pop()
    if my_stack.size()==0:
        print("Yes,{} is Plalindrome!".format(mychar))
    else:
        print("No,{} isn't Plalindrome!".format(mychar))
            
        
    
if __name__ == "__main__":
    # 初始化一个栈对象
    mychar1='ahahahhhh'
    mychar2='ahaha'
    mychar3='ahha'
    mychar4='好不好'
    Is_Plalindrome(mychar1)
    Is_Plalindrome(mychar2)
    Is_Plalindrome(mychar3)
    Is_Plalindrome(mychar4)
  
运行结果.png

相关文章

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • 栈的简单Java实现

    栈栈的特点是先进后出,出栈、入栈都是在栈顶操作。

  • 汇编学习-入栈和出栈

    栈有两个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈...

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/sidyvftx.html