搜索
您的当前位置:首页python小知识-队列和栈

python小知识-队列和栈

来源:爱问旅游网

1.队列

队列可以做两端增删数据元素
队列中的数据元素遵循'先进先出'的原则,也称为FIFO结构(First In First Out)
从空队列中弹出数据和向满队列中压入数据,均视为错误

class SQueue:
    # 创建空队列
    def __init__(self):
        self._elem = []
    
	
	# 判空
    def is_empty(self):
        return self._elem == []
    
	
	# 判满 (因使用list无固定大小来实现,故不需要判满)
    
	
	# 压入数据
    def push(self, data):
        # 从列表头插入数据
        self._elem.insert(0, data)
    
	
	# 弹出数据
    def pop(self):
        # 需要判断队列是否为空
        if self.is_empty():
            raise IndexError("stack error:试图从空队列中弹出数据")
        # 从列表尾移出数据
        return self._elem.pop()

# 自测代码
if __name__ == "__main__":
    # 创建自己的队列
    myqueue = SQueue()
    # 压入数据 aaa/bbb/ccc/ddd
    myqueue.push('aaa')
    myqueue.push('bbb')
    myqueue.push('ccc')
    myqueue.push('ddd')
    # 弹出数据
    while not myqueue.is_empty():
        print(myqueue.pop())
    # 空队列中获取数据
    myqueue.pop()

2.栈

栈限制只能在栈顶进行数据插入和删除操作
栈中数据元素遵循'后进先出'的原则,也称为FILO结构(First In Last Out)
向满栈中压入数据和从空栈中弹出数据,均视为错误

class SStack:
    # 构建空栈
    def __init__(self):
        self._elem = []

    # 判空
    def is_empty(self):
        return self._elem == []

    # 判满 (因使用list无固定大小来实现,故不需要判满)

    # 压入数据
    def push(self, elem):
		# 从列表尾部插入数据
        self._elem.append(elem)
        

    # 弹出数据
    def pop(self):
        # 需要判断栈是否为空
        if self.is_empty():
            raise IndexError("stack error:试图从空栈中弹出数据")
        # 从列表的尾部弹出数据
        return self._elem.pop()


# 自测代码
if __name__ == "__main__":
    # 创建自己的栈
    mystack = SStack()
    # 压入数据 10/20/30/40
    mystack.push(10)
    mystack.push(20)
    mystack.push(30)
    mystack.push(40)
    # 弹出所有数据
    while not mystack.is_empty():
        print(mystack.pop())
    # 试图从空栈中弹出数据
    mystack.pop()

因篇幅问题不能全部显示,请点此查看更多更全内容

Top