概述
栈(stack):有些地方称为堆栈,是一种容器,一种线性表数据结构,它的特点在于只能允许在容器的一端(称为栈顶端指标,top)进行插入数据(push)和删除数据(pop)的运算。
由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
我们把栈中允许插入和删除的一段称为栈顶(top);另一端则称为栈底(bottom)。当容器中没有任何数据元素时,称之为空栈。
下面是一个用python实现的一个栈:
class Stack:
# 初始化栈
def __init__(self, n):
self.nsize = n
self.s = [0] * (n-1)
self.top = 0
# 判断栈是否为空
def isEmpty(self):
return self.top == 0
# 判断栈是否存满
def isFull(self):
return self.top == self.nsize
# 实现入栈操作
def push(self, a):
self.top += 1
self.s[self.top] =a
# 实现出栈操作
def pop(self):
t = self.s[self.top]
self.top -= 1
return t
# 查看栈内元素
def show(self):
print(self.s[1:self.top+1])
图示如下:
栈的基本操作
栈的基本操作如下:
- 初始化空栈:创建一个空栈,定义栈的大小size,以及栈顶元素指针top。
- 判断栈是否为空:当堆栈为空时,返回True。当堆栈不为空时,返回False。。一般只用于栈中删除操作和获取当前栈顶元素操作中。
- 判断栈是否已满:当堆栈已满时,返回True,当堆栈未满时,返回False。一般只用于顺序栈中插入元素和获取当前栈顶元素操作中。
- 插入元素(进栈、入栈):相当于在线性表最后元素后面插入一个新的数据元素。并改变栈顶指针top的指向位置。
- 删除元素(出栈、退栈):相当于在线性表最后元素后面删除最后一个数据元素。并改变栈顶指针top的指向位置。
- 获取栈顶元素:相当于获取线性表中最后一个数据元素。与插入元素、删除元素不同的是,该操作并不改变栈顶指针top的指向位置。
举例
输入一个十进制数,通过栈的特点转换为二进制输出:
方法说明:
1、余数进栈:对于一个大于0的10进制整数,将其不断除2,将余数进栈,直到整数整除2的结果为0时结束
2、结果出栈:将栈里元素输出(注意用while循环,由于出栈操作,s的长度一直在变化,不可用for循环)
代码:
n = int(input('输入十进制数:'))
stack_bin = Stack(n)
while n > 0:
stack_bin.push(n % 2)
n //= 2
while not stack_bin.isEmpty():
print(stack_bin.pop(),end='')
键盘输入一个10输出结果为: