数据结构与算法(二)

数据结构:
线性表:
  底层是由顺序表和链表决定的。
  顺序表:
    连续内存
    列表 (分离式动态顺序表)
  链 表:
    单向链表
    单向循环链表:尾连头
    双向链表
    双向循环链表:尾连头
    
在这里插入图片描述
  栈:
    概念:
      栈 (Stack) 是限制插入和删除操作只能在一个位置进行的表,该位置是表的末端,称为栈的顶 (top)。栈的基本操作有PUSH (入栈) 和POP (出栈)。栈又被称为(FILO):
      顺序栈:
        底层基于顺序表操作
      链 栈:
        底层基于链表操作

先进后出(弹夹原理)
class Stack():
	def __init__(self):
		self.stack = []
	
	# 入栈	
	def push(self, item):
		self.stack.append(item)
		
	# 出栈
	def pop(self):
		# 如果栈内元素为空
		if self.isEmpty():
			# 抛出异常
			raise ValueError("stack is empty")
		else:
			self.stack.pop()
		
	# 栈空
	def isEmpty(self):
		return self.size() == 0
		
	# 栈内元素个数
	def size(self):
		return len(self.stack)
		
	# 栈顶元素
	def peep(self):
		if self.isEmpty():
			raise ValueError("stack is empty")
		else:
			return self.stack[-1]

在这里插入图片描述
  队列:
    队列机制:先进先出(队尾进,队头出)
    概念:
      队列(queue)也是表,使用队列时插入和删除在不同的端进行。队列的
      基本操作是Enqueue(入队),在表的末端(rear)插入一个元素,还有
      出列(Dequeue),删除表开头的元素。又被称为(FIFO)
      
    顺序队:
    链 队:

class Queue():
	def __init__(self):
		self.queue = []
	
	def enqueue(self, item):
		self.queue.append(item)
		
	def dequeue(self):
		if self.is_empty():
			raise IndexError("queue is empty")
		else:
			return self.queue.pop()
		
	def qsize(self):
		return len(self.queue)
	
	def is_empty(self):
		return self.qsize() == 0

在这里插入图片描述
  树 :
    概念:
      是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。
      把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
      它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;
      每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树
      
    树的种类:
      无序树:
        树中任意节点的子节点之间没有顺序关系,这种树称为无序树,
        也称为自由树;
        
      有序树:
        树中任意节点的子节点之间有顺序关系,这种树称为有序树;
        
      二叉树:
        每个节点最多含有两个子树的树称为二叉树;
        
      完全二叉树:
        对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点都在最底层的完全二叉树;
      
      平衡二叉树(AVL树):
        当且仅当任何节点的两棵子树的高度差不大于1的二叉树;
      排序二叉树(二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树);
      
      霍夫曼树(用于信息编码):
        带权路径最短的二叉树称为哈夫曼树或最优二叉树;
        
      B树:
        一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树。
    
    二叉树的遍历:
      广度优先:
        层序遍历
          从树的root开始,从上到下从从左到右遍历整个树的节点
          
      深度优先:
        先序遍历
          在先序遍历中,我们先访问根节点,然后递归使用先序遍历访问左子树,再递归使用先序遍历访问右子树。
          根节点->左子树->右子树
          在这里插入图片描述
        
        中序遍历
          在中序遍历中,我们递归使用中序遍历访问左子树,然后访问根节点。最后,再递归使用中序遍历访问右子树。
          左子树->根节点->右子树
          在这里插入图片描述
        
        后续遍历
          在后续遍历中,我们先递归使用后续遍历访问左子树和右子树,最后访问根节点。
          左子树->右子树->根节点
          在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值