参考大话数据结构,利用Python3实现了栈的顺序结构。
class SeqStack(object):
def __init__(self, size=10):
self.__MAXSIZE = size # 将MAXSIZE定义为私有变量,禁止子类对象访问
self.__data = [None] * size # 将data定义为私有变量,禁止子类对象访问
self.__top = -1 # 栈为空时top=-1,将top定义为私有变量,禁止子类对象访问
def __str__(self):
return ' '.join([str(self.__data[i]) for i in range(self.__top + 1)])
def push(self, value):
if self.__top + 1 >= self.__MAXSIZE:
raise OverflowError('当前栈已满(%s),无法存入数据!' % str(self))
return False
self.__top += 1
self.__data[self.__top] = value
return True
def push_many(self, values):
if not values:
raise ValueError('请传入数据!')
if type(values) != list:
raise TypeError('请传入列表!')
for v in values:
self.push(v)
def pop(self):
if self.__top == -1:
raise OverflowError('当前栈已空,无法取出数据!')
value = self.__data[self.__top]
self.__data[self.__top] = None # 删除原有数据
self.__top -= 1
return value
def top(self):
if self.__top == -1:
return None # 栈为空时返回None
return self.__data[self.__top]
def __len__(self):
return self.__top + 1
def main():
stk = SeqStack(20)
stk.push(20)
print('1: ', stk)
stk.push_many([4, 2, 4, 6, 3, 76, 11, 23])
print('2: ', stk)
stk.pop()
print('3: ', stk)
print(len(stk))
if __name__ == '__main__':
main()
以上,欢迎交流指正!