数据结构与算法四

栈与队列
栈的基本运算

置空栈:构造一个空栈
判栈空:若为空则返回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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值