Basic data structure
作者:互联网
栈Stack
栈如同一叠盘子,是典型的“后进先出”的线性数据结构,数据进栈和出栈都在栈顶进行。基本的栈操作如下,
- Stack():创建空栈;不需要输入参数,返回空栈
- push(item):数据进栈;需要输入item,不需要返回参数
- pop():数据出栈;不需要输入参数,不需要返回参数
- peek():返回栈顶数据;不需要输入参数,返回栈顶数据
- isEmpty:判断栈是否为空;不需要输入参数,返回布尔值
- 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