1、栈跟队列
• 栈(也称下压栈,堆栈)
是仅允许在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈是一种后进先出(Last In First Out)的线性表,简称(LIFO)结构。
• 队列(queue)
是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
• 栈与队列的区别
○ 栈:后进先出
○ 队列:先进先出
它们都可以使用顺序存储结构和链式存储结构两种方式来实现。
2、排序
冒泡排序和选择排序
冒泡:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
def Bubble_sort(list):
n = len(list)
#利用外层循环循环一次,内层循环循环一边的特性,每循环一次,找出一个最大值
for i in range(n-1):
#循环比较相邻两个数的大小,
for j in range(n-1-i):
#如果前面数大于后面数,就交换变量的值
if list[j]>list[j+1]:
list[j],list[j+1]=list[j+1],list[j]
if __name__ == '__main__':
alist = [99,64,88,77,95,82]
Bubble_sort(alist)
print(alist)
选择:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置然后,再从剩余未排序元素中继续寻找最小(大)元素
def select_sort(list):
n = len(alist)
for i in range(n-1):
# 给min_index设置最小值
min_index = i
# 遍历无序列表,去比较,i+1
for j in range(i+1,n):
# 判断当前位置是否小于最小值,如果小于,记录位置
if list[min_index]>list[j]:
#记录其索引
min_index = j
if min_index != i :
#数值交换
list[min_index],list[i]=list[i],list[min_index]
if __name__ == '__main__':
alist = [99,64,88,77,95,82]
select_sort(alist)
print(alist)
3、二分查找(Binary Search),又称折半查找。
二分查找的前提是符号表中的记录必须有序。
• 在符号表中取中间记录作为比较对象,
□ 1. 若中间值和给定值相等,则查找成功;
□ 2. 若给定值小于中间值,则在左半区继续查找,否则在右半区进行查找;
□ 3. 不断重复直到成功或失败(循环)。
def Binary_search(list,item):
first = 0 #开始下标
last = len(list)-1 #末尾下标
while first<=last:
mid = (first+last)//2 #将列表对折取中间值下标(取整)
if list[mid] == item: #如果查找的值等于对折后值,则查找成功
return True
elif item < list[mid]: #如果查找的值在对折后值的左边,则下标-1
last = mid - 1
else: #如果查找的值在对折后值的右边,则下标+1
first = mid + 1
else:
return False
if __name__ == '__main__':
alist = [1,3,5,7,9,11,33,55,77,99,111]
print(Binary_search(alist,33))
2、树(英语:tree)
是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构
它具有以下的特点:
□ 每个节点有零个或多个子节点;
□ 没有父节点的节点称为根节点;
□ 每一个非根节点有且只有一个父节点;
□ 除了根节点外,每个子节点可以分为多个不相交的子树;
树的种类
这里是引用二叉树:
完全二叉树
平衡二叉树
排序二叉树
常见的一些树的应用场景
• 1. xml,html等,那么编写这些东西的解析器的时候,不可避免用到树
• 2. 路由协议就是使用了树的算法
• 3. mysql数据库索引(B+树)
• 4. 文件系统的目录结构
• 5. 很多经典的AI算法其实都是树搜索
树的两种重要的遍历模式是:
深度优先遍历
○ 先序遍历(preorder)
◊ 根节点->左子树->右子树
○ 中序遍历(inorder)
◊ 左子树->根节点->右子树
○ 后序遍历(postorder)
○ 左子树->右子树->根节点
广度优先遍历
○ 从树的root开始,从上到下从从左到右遍历整个树的节
3、tcp 和 udp
tcp 是传输控制协议,它是面向连接(三系握手)的,能保证数据的可靠性和准确性
udp 是用户数据报协议,全拼(User Datagram Protocol),它不面向连接,可以指定ip发送数据,不能保证数据的准确性和稳定性,得到数据会有可能产生错误或者丢失,但是udp传输速度快。
提示:udp每次只能发送少量的数据,每个数据包最大是64K
不同点:
tcp需要连接,udp不需要
tcp可以保证数据的准确性和有效性(数据包如果错乱会自动进行排序),udp保证不了
tcp超时重传,udp没有
tcp有应答机制,udp没有
tcp有流量控制,udp没有,udp没有流量控制如果死循环一直发送数据,会导致电脑卡死
tcp特点;
1、多数数据应用需要保证数据的准确性都采用的是 tcp,比如:文件上传和下载
2、udp 多数用在视频传输,比如qq视频等
3、udp 适合做广播,传输速度快,tcp 不适合做广播