ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Basic data structure

2022-07-02 19:05:51  阅读:164  来源: 互联网

标签:return name items self queue def Basic data structure


栈Stack

栈如同一叠盘子,是典型的“后进先出”的线性数据结构,数据进栈和出栈都在栈顶进行。基本的栈操作如下,

  1. Stack():创建空栈;不需要输入参数,返回空栈
  2. push(item):数据进栈;需要输入item,不需要返回参数
  3. pop():数据出栈;不需要输入参数,不需要返回参数
  4. peek():返回栈顶数据;不需要输入参数,返回栈顶数据
  5. isEmpty:判断栈是否为空;不需要输入参数,返回布尔值
  6. size():返回栈的尺寸;不需要输入参数,返回整数

Stack数据结构可以直接利用python自带的list实现,需要注意初始化函数不需要返回任何东西。

class Stack():
    def __init__(self):
        self.items = []
        
    def isEmpty(self):
        return self.items == []
    
    def size(self):
        return len(self.items)
    
    def push(self,item):
        self.items.append(item)
        
    def pop(self):
        self.items.pop()
        
    def peek(self):
        return(self.items[len(self.items) - 1])

栈数据结构应用实例:括号检查

栈数据结构可用来进行括号检查如下程序,首先遍历输入字符串的每个字符,假如是左括号则进栈,是右括号则出栈,最终实现括号检查。

# import the Stack module written by myself
import Stack # Module name

def par_checker(testString):
    index = 0
    s = Stack.myStack() # Class name in module imported
    while index < len(testString):
        if testString[index] == '(':
            s.push(testString[index])
        else:
            s.pop()
        index  = index + 1
    
    if s.isEmpty():
        return True
    else:
        return False

print(par_checker('(('))

队列queue

队列同样是一种线性数据结构,不同于栈的是,队列总是在队尾增加元素,在队头删除元素,典型的队列实例如在银行排队办理业务的人就是一个队列。

# Completed implementation of a queue ADT

class Queue:
    def __init__(self):
        self.items = []
    
    def is_empty(self):
        return len(self.items) == 0

    def enqueue(self, item):
        self.items.insert(0, item)
    
    def dequeue(self):
        return self.items.pop()
    
    def size(self):
        return len(self.items)

# test 
# d = Queue()
# d.enqueue(1)
# d.enqueue(2)
# print(d.items)

队列数据结构应用

Josephus problem是这样玩的,假设一开始有4个人赵、钱、孙、李,即name_list有4个元素。游戏开始赵手里有个hot potato,第一轮赵将这个hot potato向前传递num次(例子里是2),拿到这个hot potato的人出局;第二轮从出局的下一个人开始,向前传递2次,拿到hot potato的人出局;如此循环,知道最终只剩下一个人是winner。最重要的一点是,将这些name存入到队列之后,依次出队列,每轮执行num次入队出队后,下一个出队的就是这一轮被淘汰的选手。

# Completed implementation of a queue ADT

import MyQueue
# In my case, size(name_list) = 4, num = 2
def hot_potato(name_list, num):
    # save all player names in a queue
    name_queue = MyQueue.Queue()
    for name in name_list:
        name_queue.enqueue(name)

    # game started
    while name_queue.size() > 1:
        for i in range(num):
            name_queue.enqueue(name_queue.dequeue())
        # each turn, one person leaves the queue
        name_queue.dequeue()

    # the winner
    return name_queue.dequeue()

print(hot_potato(["Zhao", "Qian", "Sun", "Li"], 2))

标签:return,name,items,self,queue,def,Basic,data,structure
来源: https://www.cnblogs.com/gqdy/p/16424962.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有