版权声明:版权归本人,仅供大家参考 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)%sizefront
f)
入队列:队不满!Q[rear]=X,rear
= (rear+1)%size
g)
取队头:队不空!Q[front]
h)
出队列:队不空!X=Q[front],front=(front+1)%size