相互之间具有一定联系的数据元素的集合
顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构。
链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针,用该指针来表示数据元素之间的逻辑结构。
栈:是限制在表的一端进行插入和删除操作的线性表。又称为先进后出(FILO)或后进先出(LIFO)线性表
栈顶:允许进行插入、删除操作的一端,又称表尾。用栈顶指针来指向栈顶元素
栈底:是固定端,又称为表头
空栈:表中没有元素
括号匹配
方式一:(比较麻烦)
class Stack():
def __init__(self):
self.top = -1
self.sList = []
def inStack(self, d):
for x in d:
if x == '(' or x == '[' or x == '{':
self.sList.append(x)
self.top += 1
elif x == ')':
z = self.sList[self.top]
if z == '(':
print(z)
self.top -= 1
else:
print('匹配失败')
break
elif x == ']':
z = self.sList[self.top]
if z == '[':
print(z)
self.top -= 1
else:
print('匹配失败')
break
elif x == '}':
z = self.sList[self.top]
if z == '{':
print(z)
self.top -= 1
else:
print('匹配失败')
break
if self.top == -1:
print('匹配成功')
exit(0)
s = Stack()
while True:
d = input('请输入:')
s.inStack(d)
方式二:(大佬教的)
dict={'(':')','{':'}','[':']'}
class Stack():
def __init__(self):
self.top = -1
self.sList = []
def inStack(self, z):
self.top += 1
self.sList.append(z)
def outStack(self, y):
if dict[self.sList[self.top]] == y:
del self.sList[self.top]
self.top -= 1
elif dict[self.sList[self.top]] != y:
print('括号不匹配')
exit()
def pd(self, kh):
if len(kh) % 2 == 1:
print('匹配失败')
exit()
for i in range(len(kh)):
if kh[i] in dict.keys():
self.inStack(kh[i])
else:
self.outStack(kh[i])
if self.top == -1:
print('匹配成功')
kh = (input('请输入:'))
s = Stack()
s.pd(kh)
进制转换:
class Stack():
def __init__(self):
self.top = -1
self.sList = []
def inStack(self, data):
self.top += 1
self.sList.append(data)
def outStack(self):
if self.top == -1:
return -1
else:
d = self.sList[self.top]
del self.sList[self.top]
self.top -= 1
return d
def length(self):
return self.top+1
s = Stack()
d = int(input('请输入一个数:'))
while d > 0:
ys = d % 2
s.inStack(ys)
d = d // 2
while s.length() > 0:
print(s.outStack(), end='')
树是n(n>=0)个结点的有限集合T,若n=0,称为空树。
有且只有一个结点称为树的根结点。
1、结点:一个数据元素及其若干指向其子树的分支。
2、结点的度、树的度:结点锁拥有的子树的棵数称为结点的度。树中结点度的最大值称为树的度。
3、叶子结点:树中度为0的结点称为叶子结点。
4、孩子结点、双亲结点、兄弟结点:一个结点的子树的根称为该结点的孩子结点或子结点;相应的,该结点是其孩子结点的双亲结点或父结点。
先序遍历:根左右
中序遍历:左根右
后序遍历:左右根