1 问题
在常用的数据结构中,有一批结构被称为容器——栈与队列。那该怎么利用Python学习栈这种结构的特性并用Python实现其相关操作呢?
2 方法
栈相对于是一个容器,而这个容器里包含的是一些元素。同时,栈是保证元素后进先出关系的结构。栈主要用来保存计算过程中的临时数据,这些数据是计算中发现或者产生的,在后面的计算中可能需要使用到它们。
栈也常常用来作为一种缓冲存储结构,用来存储工作中产生的暂时不用或者用不完的数据。
- 在Python中,我们可以用list来实现顺序栈,由于list才用动态顺序表技术,用它作为栈的表不会满。
- 同时,我们使用Python的内置函数append()和pop()实现压栈和弹栈的操作。
代码清单 1
代码语言:javascript复制class stack:
def __init__(self, maxsize):
self.max = maxsize
self.elem = [None] * self.max
self.top = 0
self.base = 0
def push(self,elem):
if self.top - self.base == self.max:
raise Exception("The stack is full!")
self.elem[self.top] = elem
self.top = 1
def pop(self):
if self.top == self.base:
raise Exception("The stack is empty")
self.top -= 1
e = self.elem[self.top]
return e
def get_top(self):
return self.elem[self.top - 1]
data = list(map(int,input("Please input a series of datas:").split(" ")))
s = stack(len(data))
for i in range(len(data)):
s.push(data[i])
for i in range(s.top - s.base):
print(s.elem[i],end=" ")
print("n")
e = s.get_top()
print("The top elem of the stack is: %d" % e)
print("n")
for i in range(s.top - s.base):
s.pop()
print("After popping the stack %d times,the stack is:" % (i 1),end=" ")
for j in range(s.top - s.base):
print(s.elem[j],end=" ")
print("n")
3 结语
针对利用Python实现顺序栈这一问题,提出了利用list动态顺序表的特性实现顺序栈和利用Python的内置函数append()和pop()实现压栈和弹栈的操作,证明该方法是有效的。本文代码具有较好可使用性,但在高时间性能上仍有欠缺,将来可尝试其他方法改善此问题。