项目案例: 栈与队列的封装
1.封装栈的数据结构
栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”, 另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。向一个栈内插入元素称为是进栈,push; 从一个栈删除元素称为是出栈,pop。特点 :后进先出(LIFO)。
根据列表的数据结构封装栈的数据结构具体程序如下:
class Stack(object):
"""
根据列表的数据结构封装栈的数据结构
"""
# 构造方法
def __init__(self):
# 定义一个空栈, 用来存储栈的元素
self.__stack = [ ]
# len(stackobj)自动会调用该方法
def __len__(self):
return len(self.__stack)
def push(self, item):
"""入栈"""
self.__stack.append(item)
print("元素[%s]入栈成功" % (item))
def pop(self):
"""出栈, 判断栈是否为空"""
if not self.is_empty():
# 获取出栈的元素
item = self.__stack.pop()
print("元素[%s]出栈成功" % (item))
else:
raise Exception("栈为空")
def top(self):
"""获取栈顶元素"""
if not self.is_empty():
# 获取出栈的元素
item = self.__stack[-1]
print("栈顶元素为: [%s] " % (item))
else:
raise Exception("栈为空")
def length(self):
"""获取栈的元素个数"""
return len(self.__stack)
def is_empty(self):
"""判断栈是否为空"""
return len(self.__stack) == 0
stack = Stack()
stack.push(5)
print(len(stack))
stack.push(3)
stack.pop()
stack.is_empty()
stack.pop()
stack.is_empty()
print(len(stack))
具体的操作和返回值如下表,可对照下表执行操作,检验栈的的封装是否成功:
2.封装队列的数据结构
队列是限制在一端进行插入操作和另一端删除操作的线性表,允许进行插入操作的一端称为“队尾”, 允许进行删除操作的一端称为“队头”,,当队列中没有元素时称为“空队”。特点 :先进先出(FIFO)。
根据列表的数据结构封装队列的数据结构具体程序如下:
class Queue(object):
def __init__(self):
self.__queue = []
def __len__(self):
return len(self.__queue)
def enqueue(self, item):
self.__queue.append(item)
print("元素[%s]进队成功" %(item))
def is_empty(self):
if len(self.__queue) == 0:
return True
else:
return False
def dequeue(self):
if not self.is_empty():
item = self.__queue[0]
self.__queue.remove(item)
print("元素[%s]出队成功" %(item))
else:
raise Exception("对列为空!")
def first(self):
if not self.is_empty():
item = self.__queue[0]
print("队列的队头为[%s]" %(item))
else:
raise Exception("对列为空!")
queue = Queue()
queue.enqueue(5)
queue.enqueue(3)
print(len(queue))
queue.dequeue()
print(queue.is_empty())
queue.dequeue()
print(queue.is_empty())
运行结果如下所示:
具体的操作和返回值如下表,也可对照下表执行操作,检验队列的的封装是否成功: