zoukankan      html  css  js  c++  java
  • 数据结构与算法(3)栈与递归

    1 栈的理解

    1. 栈是一个数据集合,可以理解为只能在一端进行插入或者删除操作的列表。

    2. 栈的特点:后进先出

    3. 栈的基本操作

      1. 进栈:push
      2. 出栈:pop
      3. 取栈顶:gettop
    4. def brace_match(s):
          stack = []
          d = {"(":")", "[":"]", "{":"}"}
          for ch in s:
              if ch in {'(','[','{'}:
                  stack.append(ch)
              elif len(stack) == 0:
                  print('多了右括号%s' % ch)
                  return False
              elif d[stack[-1]] == ch:
                  stack.pop()
              else:
                  print('括号%s处不匹配' % ch)
                  return False
          if len(stack) == 0:
              return True
          else:
              print('剩余括号未匹配')
              return False
              
      

    2 队列的理解

    队列的理解:

    1. 队列(queue)是一个数据集合,仅允许在列表一端进行插入,另一端进行删除。
    2. 进行插入的一端称为队尾(rear),插入动作被称为进队或者入队。
    3. 进行删除的一端称为队头(front),删除动作称为出队。
    4. 队列的性质:先进先出(first-in,first-out)
    5. 双向队列:队列两端都允许进行进队和出队操作

    队列的内置模块:from collections import deque

    1. 创建队列:queue = deque(li)
    2. 进队:append
    3. 出队: popleft
    4. 双向队列首进队: appendleft
    5. 双向队列尾进队:pop

    3 递归实现斐波那契函数

    # 递归:
    def my_num(x):
        if x == 1:
            return 1
        elif x == 2:
            return 2
        else:
            return my_num(x-2) + my_num(x-1)
    for i in range(1, 10):
        print(my_num(i))
    

    4 车辆调度问题

    def VehicleReecorder(Trucks, k):
        BufferRails = []
        for i in range(k):
            BufferRails.append([])
        currentCarriage = 1
        for i in Trucks:
            if i == currentCarriage:
                print(f'{i}')
                currentCarriage += 1
                continue
            else:
                for buffer in BufferRails:
                    if not buffer:
                        buffer.append(i)
                        break
                    else:
                        if min(buffer) > i:
                            buffer.append(i)
                            break
        for buffer_list in BufferRails:
            for i in range(len(buffer_list)):
                last = buffer_list.pop()
                if last == currentCarriage:
                    print(f'{i}')
                    currentCarriage +=1
    
  • 相关阅读:
    动态规划法(八)最大子数组问题(maximum subarray problem)
    动态规划法(九)想要更多例子?
    动态规划法(五)钢条切割问题(rod cutting problem)
    MySql排序函数
    Mysql 分组函数查询
    MySql单行函数
    MySql常见的函数
    MySql常见的条件查询
    MySql的一些基础查询
    MySql资料总全
  • 原文地址:https://www.cnblogs.com/yangjiez/p/12181745.html
Copyright © 2011-2022 走看看