数据结构---队栈操作(Python)

       因为最近要完成有关树的搜索的算法,涉及到深度、广度优先遍历,因此很有必要将栈和队列这个景点数据结构回顾一遍,使用Python语言编码。因为实在是比较简单,没加注释,同行有需要的直接拷贝过去就行

       话不多说先上栈操作的代码:

#coding:utf-8

class Stack(object):
    def __init__(self):
        self.stack = []
        self.top = 0 #初始化栈顶为0
    def push(self, data): #入栈
        i = 0
        lenth = len(data)
        for i in range(lenth):
            self.stack.append(data[i])
            self.top += 1 #栈顶指针后移一个位置
        print("入栈后的栈顶位置:top->%d" %(self.top-1))
        return self.stack
    def pop(self,stack): #出栈
        self.top = len(stack) -1
        k = self.top
        for i in range(k+1):
            print("top->%d:%d" %(self.top, stack[self.top]))
            self.top -= 1


data = []
lenth = input("请输入data的长度:")
for i in range(lenth):
    x = input()
    data.append(x)
print("data:%s" %data)
s = Stack()
stack = s.push(data)
print("stack:%s,lenth:%d" %(stack, len(stack)))
s.pop(stack)

对栈的理解就是往地上摞盘子的过程,入栈就相当于摞盘子,出栈就相当于取最上边的盘子,只能一个一个从上边拿,采取“先进后出”策略,即先进去的后出来。


队列的代码如下:

#coding:utf-8

class Queue(object):
    def __init__(self):
        self.queue = []
        self.topleft = 0
        self.topright = 0
    def push(self, data):
        lenth = len(data)
        i = 0
        for i in range(lenth):
            self.topright += 1
            self.queue.append(data[i])
        self.topright -= 1
        print("入队完毕,队列:%s,队头topleft->%d,队尾topright->%d" %(self.queue, self.topleft, self.topright))
        return self.queue
    def pop(self,data):
        self.queue = data
        while True:
            if self.topleft == self.topright:
                print("出队元素:%d,队尾topleft->%d" %(data[self.topleft], self.topleft))
                self.queue.pop(0)
                print("出队完毕")
                break
            else:
                print("出队元素:%d,队尾topright->%d" %(data[self.topleft], self.topright))
                self.queue.pop(0)
                self.topright -= 1

data = []
lenth = input("请输入data的长度:")
for i in range(lenth):
    x = input()
    data.append(x)
print("data:%s" %data)
s = Queue()
queue = s.push(data)
s.pop(queue)

对队列的理解就是打子弹,先按进弹夹的子弹会先打出来,采取“先进先出”策略,即先进队列的成员应该先出队。

队列这里有一点需要特别注意!!

队列出队默认是最先进来的那个元素,假设queue[0] = A这个元素出队了,那么原本queue[1] = B这个元素自动←移一个单位变成queue[0] =B,因此我们每次出队的时候只需要出queue[0]这个元素就行了,每出一次,队尾topright都要减一左移一个单位,目的是判断什么时候队列空了。



你可能感兴趣的:(数据结构)