1.栈的封装
栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。向一个栈内插入元素称为是进栈,push;从一个栈删除元素称为是出栈,pop。特点 :后进先出(LIFO)
代码实现:
# 栈: 先进后出 ["栈底"......."栈顶"]
# pop(出栈), push(入栈), len(获取栈的长度), is_empty(判断栈是否为空),top(栈顶)
class Stack(object):
def __init__(self):
self.stack = []
def is_empty(self):
return self.stack == []
def push(self, item):
self.stack.append(item)
print("入栈元素为%s,入栈成功" %(item))
def pop(self):
if self.is_empty():
# raise抛出异常
raise Exception("栈为空,不能出栈")
else:
item = self.stack.pop()
print("出栈元素为%s,出栈成功" %(item))
def top(self):
if self.is_empty():
raise Exception("栈为空,没有栈顶元素")
else:
return self.stack[-1]
def __len__(self):
# 新的魔术方法, 当执行len(s)时会自动执行该魔术方法
return len(self.stack)
s = Stack()
for item in range(10):
s.push(item)
for item in range(2):
s.pop()
print("当前栈的长度为: ", len(s))
print("当前栈是否为空?", s.is_empty())
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 enqueue success" %(item))
def is_empty(self):
return self.queue == []
def dequeue(self):
if not self.is_empty():
item = self.queue[0]
self.queue.remove(item)
print("%s dequeue success" % (item))
else:
raise Exception("queue is null")
def first(self):
if not self.is_empty():
item = self.queue[0]
print("first item is %s" % (item))
else:
raise Exception("queue is null")
q = Queue()
for item in range(10):
q.enqueue(item)
for item in range(3):
q.dequeue()
print("queue len is ", len(q))