zoukankan      html  css  js  c++  java
  • 读书笔记之数据结构栈与队列

    1.栈-先进后出LIFO

    出栈 poping,入栈pushing

    栈的5个方法:is_empty,push(向栈的顶部添加一个元素),pop(从顶部移除一个元素),peek(返回顶部的元素,但不会移除),size(返回一个表示栈中元素数量的整型数)

    2.代码举例如下:

    class Stack:
    def __init__(self):
    self.items=[]

    def is_empty(self):
    return self.items==[]

    def push(self,item):
    self.items.append(item)

    def pop(self):
    return self.items.pop()

    def peek(self):
    last=len(self.items)-1
    return self.items[last]

    def size(self):
    return len(self.items)

    stack=Stack() #新创建的栈是空的,,is_empty方法将返回True
    print(stack.is_empty())
    #向栈中添加新元素,is_empty返回的则是False
    stack1=Stack()
    stack1.push(1)
    print(stack1.is_empty())
    #调用pop方法从栈中移除一个元素,is_empty方法 的返回值为True
    stack3=Stack()
    stack3.push(1)
    item=stack3.pop()
    print(item)
    print(stack3.is_empty())
    #查看栈的内容并打印其大小
    stack4=Stack()

    for i in range(0,6):
    stack4.push(i)

    print(stack4.peek())
    print(stack4.size())



    3.运行结果如下:

     4.使用栈逆转字符串:

    首先将“Hello"中的每个字符串放入栈中,然后遍历创建的栈,取出栈中的元素并放入遍历reverse,遍历完成后,原来的单词就逆序完成了。

    class Stack:
    def __init__(self):
    self.items=[]

    def is_empty(self):
    return self.items==[]

    def push(self,item):
    self.items.append(item)

    def pop(self):
    return self.items.pop()

    def peek(self):
    last=len(self.items)-1
    return self.items[last]

    def size(self):
    return len(self.items)

    stack=Stack()
    for c in "Hello":
    stack.push(c)

    reverse = " "

    for i in range(len(stack.items)):
    reverse+=stack.pop()

    print(reverse)



    运行结果就是把Hello变成了 olleH
    5.队列-先进先出 FIFO
    编写拥有4个方法的队列:enquee(向队列中添加一个新元素),dequeue(从队列中移除一个元素),is_empty,size(返回队列中元素的数量)

    class Queue:
    def __init__(self):
    self.items=[]

    def is_empty(self):
    return self.items==[]

    def enqueue(self,item):
    self.items.insert(0,item)

    def dequeue(self):
    return self.items.pop()

    def size(self):
    return len(self.items)

    a_queue=Queue()
    print(a_queue.is_empty())

    b_queue=Queue()
    for i in range(5):
    b_queue.enqueue(i)

    print(b_queue.size())
    #依次移除队列中的元素
    c_queue=Queue()

    for i in range(5):
    c_queue.enqueue(i)

    for i in range(5):
    print(c_queue.dequeue())

    print()
    print(c_queue.size())

    运行结果

     6. 练习

     

    7 答案

    1.

    class Stack:
    def __init__(self):
    self.items = []

    def is_empty(self):
    return self.items == []

    def push(self, item):
    self.items.append(item)

    def pop(self):
    return self.items.pop()

    def peek(self):
    return self.items[len(self.items)-1]

    def size(self):
    return len(self.items)

    stack = Stack()
    for c in "yesterday":
    stack.push(c)


    reversed_string = ""


    for i in range(len(stack.items)):
    reversed_string += stack.pop()


    print(reversed_string)
    2.
    class Stack:
    def __init__(self):
    self.items = []

    def is_empty(self):
    return self.items == []

    def push(self, item):
    self.items.append(item)

    def pop(self):
    return self.items.pop()

    def peek(self):
    return self.items[len(self.items)-1]

    def size(self):
    return len(self.items)

    list1 = [1, 2, 3, 4, 5]
    list2 = []

    stack = Stack()
    for item in list1:
    stack.push(item)


    for i in range(len(stack.items)):
    list2.append(stack.pop())

    print(list2)


  • 相关阅读:
    jsp_Scriptlet
    jsp_注释
    Http状态码详解
    Tomcat服务器的安装和配置
    【BZOJ 1018】线段树 **
    【BZOJ 2054】 2054: 疯狂的馒头 (并查集特技)
    【BZOJ 1969】 1969: [Ahoi2005]LANE 航线规划 (树链剖分+线段树)
    【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)
    【UOJ 79】 一般图最大匹配 (✿带花树开花)
    【UOJ 34】 多项式乘法 (FFT)
  • 原文地址:https://www.cnblogs.com/JacquelineQA/p/12977460.html
Copyright © 2011-2022 走看看