Linux自动化运维——Python(9)(用类和面向对象的方法去实现数据结构中的栈和队列)

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))

猜你喜欢

转载自blog.csdn.net/weixin_43215948/article/details/107459130