1 问题
在常用的数据结构中,有一批结构被称为容器——栈与队列。那该怎么利用Python学习栈这种结构的特性并用Python实现其相关操作呢?
2 方法
栈相对于是一个容器,而这个容器里包含的是一些元素。同时,栈是保证元素后进先出关系的结构。栈主要用来保存计算过程中的临时数据,这些数据是计算中发现或者产生的,在后面的计算中可能需要使用到它们。
栈也常常用来作为一种缓冲存储结构,用来存储工作中产生的暂时不用或者用不完的数据。
- 在Python中,我们可以用list来实现顺序栈,由于list才用动态顺序表技术,用它作为栈的表不会满。
- 同时,我们使用Python的内置函数append()和pop()实现压栈和弹栈的操作。
代码清单 1
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()实现压栈和弹栈的操作,证明该方法是有效的。本文代码具有较好可使用性,但在高时间性能上仍有欠缺,将来可尝试其他方法改善此问题。