数据结构与算法四

版权声明:版权归本人,仅供大家参考 https://blog.csdn.net/Dream____Fly/article/details/86623424

栈与队列
栈的基本运算

置空栈:构造一个空栈
判栈空:若为空则返回true
判栈满:若栈满则返回true
进栈Push:将一个元素压入栈中
退栈Pop:将栈顶元素删除,并且返回该元素
取栈顶元素,getPop:将栈顶元素的值返回,但不改变栈的状态。

class seq_stack(object):
    #初始化栈
    def __init__(self,size):
        self.size = size
        self.top = -1
        self.stack = [None for i in range(size)]

    #返回元素个数
    def get_count(self):
        return self.top+1

    #清空栈
    def clear(self):
        self.top = -1

    #判断栈控,栈空为true,栈不空为false
    def is_none(self):
        return self.top == -1

    #判断栈满
    def is_full(self):
        return self.top == self.size-1

    #取栈顶
    def top(self):
        self.top = self.top
        return self.stack[self.top]

    #进栈
    def push(self,element):
        self.element = element
        if seq_stack.is_full(self):
            print("栈已满")
        else:
            self.top = self.top + 1
            self.stack[self.top] = element

    #推栈
    def pop(self):
        if seq_stack.is_none(self):
            print("栈为空")
        else:
            self.top = self.top - 1
            return self.stack[self.top+1]

if __name__ =='__main__':
    a = seq_stack(3)
    print("栈是否为空:%s"%a.is_none())
    b1 = a.push(1)
    b2 = a.push(2)
    b3 = a.push(3)
    print("栈的个数:%s"%a.get_count())
    c1= a.pop()

    print(c1)
    
	输出结果:栈是否为空:True
		栈的个数:3
		3

队列
队列也是一种操作受限的线性表,它只允许在表的一端进行插入,另外一端进行删除。允许插入的一端称为队尾rear,允许删除的一端称为队头,front。
元素插入称为入队,删除称为出队。先来的元素先出,即先进先出。
顺序循环队列:
a)
类似顺序表,顺序队列也是利用数组实现的。因为队首与队尾是变化着的,故使用两个指针front与rear分别指向队首与队尾。在初始化时,将其设置为0.
b)
头尾相等,既可以是队列空,也可以是队列满,单单依靠差值无法判断。通常的做法是少利用一个位置。每次插入前进行测试,尾指针加1是为为头指针,如果是则队列满,否则可以插入。
c)
置空队列:头指针为0,尾指针为0
d)
判队空:frontrear
e)
判队满:(rear+1)%size
front
f)
入队列:队不满!Q[rear]=X,rear
= (rear+1)%size
g)
取队头:队不空!Q[front]
h)
出队列:队不空!X=Q[front],front=(front+1)%size

猜你喜欢

转载自blog.csdn.net/Dream____Fly/article/details/86623424