目录
实验目的
考察能否正确理解栈的顺序存储结构,以及对顺序栈基本操作的掌握程度。
实验内容
创建程序,在其中编写一个顺序栈的类,该类必须包含顺序栈的定义及基本操作,并通过以下步骤测试基本操作的实现是否正确。
(1)初始化一个顺序栈 SequenceStack。
(2)判断栈是否为空。
(3)将元素 1,3,5 依次进栈。
(4)遍历栈内所有元素。
(5)获取栈顶元素。
(6)获取栈的长度。
(7)将栈中元素依次出栈并输出。
(8)判断栈是否为空。
实验代码
###########################################################
#类名称:SequenceStack
#类说明:定义一个栈
#类释义:提供顺序栈的相关操作
###########################################################
class SequenceStack:
############################
#默认的初始化栈的函数
############################
def __init__(self):
self.MaxStackSize=10
self.s=[None for x in range(0,self.MaxStackSize)]
self.top=-1
#############################
#访问某一元素的函数
#############################
def StackVisit(self,element):
print(element,end=' ')
############################
#判断栈是否为空的函数
############################
def IsEmptyStack(self):
if self.top==-1:
iTop=True
else:
iTop=False
return iTop
############################
#元素进栈的函数
############################
def PushStack(self,x):
if self.top<self.MaxStackSize-1:
self.top=self.top+1
self.s[self.top]=x
else:
print("栈满")
return
############################
#元素出栈的函数
############################
def PopStack(self):
if self.IsEmptyStack():
print("栈为空")
return
else:
iTop=self.top
self.top=self.top-1
return self.s[iTop]
#############################
#依次访问栈中元素的函数
#############################
def StackTraverse(self):
if self.IsEmptyStack():
print("栈为空")
return
else:
for i in range(0,self.top+1):
self.StackVisit(self.s[i])
############################
#获取当前栈顶元素的函数
############################
def GetTopStack(self):
if self.IsEmptyStack():
print("栈为空")
return
else:
return self.s[self.top]
############################
#输出当前栈长度的函数
############################
def GetStackLength(self):
if self.IsEmptyStack():
print("栈为空")
return
else:
return self.top+1
#############################################################
#类名称:TestSequenceStack
#类说明:定义一个测试顺序栈的类
#类释义:提供测试的方法
############################################################
class TestSequenceStack:
############################
#测试顺序串相关操作的函数
############################
def PrintOut(self,st):
print("(1)经判断当前栈",end='')
if st.IsEmptyStack()==True:
print("为空")
else:
print("不为空")
st.PushStack('1')
st.PushStack('3')
st.PushStack('5')
print("(2)元素",end='')
st.StackTraverse()
print("依次进栈",end='')
print("\n(3)当前栈顶元素为",end='')
print(st.GetTopStack())
print("(4)当前栈中共有",end='')
print(st.GetStackLength(),end='')
print("个元素,分别为",end='')
st.StackTraverse()
print("\n(5)元素",st.GetTopStack(),"出栈,当前栈中元素为",end='')
st.PopStack()
st.StackTraverse()
print("\n(6)元素",st.GetTopStack(),"出栈,当前栈中元素为",end='')
st.PopStack()
st.StackTraverse()
print("\n(7)元素",st.GetTopStack(),"出栈,当前",end='')
st.PopStack()
if st.IsEmptyStack()==True:
print("栈为空")
else:
print("栈不为空")
if __name__ =='__main__':
SS=SequenceStack()
TSS=TestSequenceStack()
TSS.PrintOut(SS)
运行结果
(1)经判断当前栈为空
(2)元素1 3 5 依次进栈
(3)当前栈顶元素为5
(4)当前栈中共有3个元素,分别为1 3 5
(5)元素 5 出栈,当前栈中元素为1 3
(6)元素 3 出栈,当前栈中元素为1
(7)元素 1 出栈,当前栈为空