其他分享
首页 > 其他分享> > Basic data structure

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