一、什么时数据结构?
是指相互之间具有(存在)一定关系的数据元素的集合
二、数据结构的存储方式
顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的顺序结构关系
链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针,用该指针来表示数据元素之间的逻辑结构
三、逻辑结构与物理结构
四种基本类型
集合:结构中的数据元素除了‘同属于一个集合’外,没有其他关系。
线性结构:结构中的数据元素之间存在一对一的关系
树型结构:结构中的数据元素之间存在一对多的关系
图状结构或网状结构:结构中的数据元素之间存在多对多的关系
四、数据结构的运算
建立、销毁、插入、删除、修改、查找、访问、排序
-------------------------------------
不对链表和线性表进行描述
-------------------------------------
五、队列和栈
1.栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称后进先出LIFO
(Last In First Out)或先进后出FILO(First In Last Out)线性表
栈顶(top)允许进行插入、删除操作的一端,又称表尾,用栈顶指针来指示栈顶元素。
栈底(bottom)是固定端,又称为表头
空栈:当表中没有元素时称为空栈
2.栈的顺序存储表示
3.栈的链式存储表示
栈的链式存储结构称为链栈,是运算受限的单链表,其插入和删除操作只能在表头为置进行。因此链栈没有必要想单链表那样附加头结点,栈顶指针就是链表的头指针。
模拟入栈出栈,先进后出,或后进先出
class Stack():
def __init__(self):
self.top=-1
self.slist=[]
def instack(self):
d=int(input('请输入入栈数据'))
self.top+=1
self.slist.append(d)
def outstack(self):
if self.top==-1:
print('空栈')
else:
d=self.slist[self.top]
del self.slist[self.top]
self.top-=1
print(d)
def printstack(self):
print(self.slist)
s=Stack()
while True:
bh=int(input('请输入编号'))
if bh==1:
s.instack()
elif bh==2:
s.outstack()
elif bh==3:
s.printstack()
else:
break
4.队列
队列也是运算受限的线性表。是一种先进先出的线性表。只允许在表的一端进行插入,而在另一端进行删除
队首:允许进行删除的一端称为队首
队尾:允许进行插入的一端称为队尾
模拟队列,先入先出
# a=[]
# while True:
# bh=int(input('输入编号:'))
# if bh==1:
# data=input('请输入入队数据')
# a.append(data)
# elif bh==2:
# if len(a)<1:
# print('空队列')
# else:
# data=a[0]
# a.pop(0)
# print(data,'出队')
# elif bh==3:
# print(a)
# else:
# break
六、扩展(括号问题)
判断左右括号是否匹配
写法一:
# class kuohao():
# def __init__(self,kh):
# self.top=-1
# self.stack=[]
# self.kh=kh
# def Stack(self):
# for i in self.kh:#发现左括号,入栈
# if i=='('or i=='['or i=='{':
# self.top+=1
# self.stack.append(i)
# elif i==')'or i==']'or i=='}':#发现右括号进行判断
# if self.top==-1:#如果top==-1,且i为右括号,那么break
# print('括号不匹配')
# break
# elif (self.stack[self.top]=='(' and i==')') or (self.stack[self.top]=='[' and i==']') or (self.stack[self.top]=='{' and i=='}'):
# self.stack.pop()#如果括号和i匹配,那么弹出,进行下一次
# self.top-=1
# else:#如果循环进行到这,说明还有右括号,但是已经没有左括号了
# print('括号不匹配')
# break
# else:#如果没有右括号,判断top
# if self.top==-1:#如果top==-1,那么说明站内以空,括号匹配
# print('括号匹配')
# else:#如果top!=-1,说明还有括号没有弹出
# print('括号不匹配')
#
#
# kh=input('请输入括号')
# s=kuohao(kh)
# s.Stack()
写法二:
# 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
# zfc=input('请输入括号')
# s=Stack()
# pipei=True
# for zm in zfc:
# if zm=='('or zm=='[' or zm=='{':
# s.instack(zm)
# elif zm==')':
# d=s.outstack()
# if d==-1:
# print('缺少',zm,'匹配的左括号')
# pipei=False
# break
# elif d!='(':
# print('括号不匹配',d,zm)
# pipei=False
# break
# elif zm==']':
# d=s.outstack()
# if d==-1:
# print('缺少',zm,'匹配的左括号')
# pipei=False
# break
# elif d!='[':
# print('括号不匹配',d,zm)
# pipei=False
# break
# elif zm=='}':
# d=s.outstack()
# if d==-1:
# print('缺少',zm,'匹配的左括号')
# pipei=False
# break
# elif d!='{':
# print('括号不匹配',d,zm)
# pipei=False
# break
# if pipei==True:
# if s.length()!=0:
# print('左括号多')
# else:
# print('正常')
七、树
1.树的定义
树是n(n>=0)个结点的有限集合T,若n=0时称为空树,否则:
有且只有一个特殊的称为树的跟结点:
若n>1时,其余结点被分为m(m>0)个互不相交的子集T1,T2,T3·······Tm,其中每个子集本身又是一棵树,称为根的子树。
2.树的基本术语
结点:一个数据元素及其若干指向其子树的分支
结点的度、树的度:结点所拥有的子树的棵数称为结点的度。树中结点度的最大值称为树的度。
3.树的表示形式
倒悬树、嵌套集合、广义表形式