PYTHON的数据结构和算法介绍

Python017

PYTHON的数据结构和算法介绍,第1张

当你听到数据结构时,你会想到什么?

数据结构是根据类型组织和分组数据的容器。它们基于可变性和顺序而不同。可变性是指创建后改变对象的能力。我们有两种类型的数据结构,内置数据结构和用户定义的数据结构。

什么是数据算法-是由计算机执行的一系列步骤,接受输入并将其转换为目标输出。

列表是用方括号定义的,包含用逗号分隔的数据。该列表是可变的和有序的。它可以包含不同数据类型的混合。

months=['january','february','march','april','may','june','july','august','september','october','november','december']

print(months[0])#print the element with index 0

print(months[0:7])#all the elements from index 0 to 6

months[0]='birthday #exchange the value in index 0 with the word birthday

print(months)

元组是另一种容器。它是不可变有序元素序列的数据类型。不可变的,因为你不能从元组中添加和删除元素,或者就地排序。

length, width, height =9,3,1 #We can assign multiple variables in one shot

print("The dimensions are {} * {} * {}".format(length, width, height))

一组

集合是唯一元素的可变且无序的集合。它可以让我们快速地从列表中删除重复项。

numbers=[1,2,3,4,6,3,3]

unique_nums = set(numbers)

print(unique_nums)

models ={'declan','gift','jabali','viola','kinya','nick',betty'}

print('davis' in models)#check if there is turner in the set models

models.add('davis')

print(model.pop())remove the last item#

字典

字典是可变和无序的数据结构。它允许存储一对项目(即键和值)

下面的例子显示了将容器包含到其他容器中来创建复合数据结构的可能性。

* 用户定义的数据结构*

使用数组的堆栈堆栈是一种线性数据结构,其中元素按顺序排列。它遵循L.I.F.O的机制,意思是后进先出。因此,最后插入的元素将作为第一个元素被删除。这些操作是:

溢出情况——当我们试图在一个已经有最大元素的堆栈中再放一个元素时,就会出现这种情况。

下溢情况——当我们试图从一个空堆栈中删除一个元素时,就会出现这种情况。

队列是一种线性数据结构,其中的元素按顺序排列。它遵循先进先出的F.I.F.O机制。

描述队列特征的方面

两端:

前端-指向起始元素。

指向最后一个元素。

有两种操作:

树用于定义层次结构。它从根节点开始,再往下,最后的节点称为子节点。

链表

它是具有一系列连接节点的线性数据。每个节点存储数据并显示到下一个节点的路由。它们用来实现撤销功能和动态内存分配。

图表

这是一种数据结构,它收集了具有连接到其他节点的数据的节点。

它包括:

算法

在算法方面,我不会讲得太深,只是陈述方法和类型:

原文:https://www.tuicool.com/articles/hit/VRRvYr3

1. 选择排序算法:选择排序是一种简单直观的排序算法。原理:首先在未排序序列中找到最小或最大元素,存放到排序序列的起始位置然后,再从剩余未排序元素中继续寻找最大最小元素,然后放到已排序序列的后面,以此类推直到所有元素均排序完毕。

2. 快速排序算法:快速排序的运行速度快于选择排序。原理:设要排序的数组为N,首先任意选取一个数据作为关键数据,然后将所有比它小的数放到它前面,所有比它大的数都放到它后面,这个过程称之为快速排序。

3. 二分查找算法:二分查找的输入是一个有序的列表,如果要查找的元素包含在一个有序列表中,二分查找可以返回其位置。

4. 广度优先搜索算法:属于一种图算法,图由节点和边组成。一个节点可以与多个节点连接,这些节点称为邻居。它可以解决两类问题:第一类是从节点A出发,在没有前往节点B的路径第二类问题是从节点A出发,前往B节点的哪条路径最短。使用广度优先搜索算法的前提是图的边没有权值,即该算法只用于非加权图中,如果图的边有权值的话就应该使用狄克斯特拉算法来查找最短路径。

5. 贪婪算法:又叫做贪心算法,对于没有快速算法的问题,就只能选择近似算法,贪婪算法寻找局部最优解,并企图以这种方式获得全局最优解,它易于实现、运行速度快,是一种不错的近似算法。

一、什么是深度优先遍历

深度优先遍历算法是经典的图论算法。从某个节点v出发开始进行搜索。不断搜索直到该节点所有的边都被遍历完,当节点v所有的边都被遍历完以后,深度优先遍历算法则需要回溯到v以前驱节点来继续搜索这个节点。

注意:深度优先遍历问题一定要按照规则尝试所有的可能才行。

二、二叉树

2.二叉树类型

二叉树类型:空二叉树、满二叉树、完全二叉树、完美二叉树、平衡二叉树。

空二叉树:有零个节点

完美二叉树:每一层节点都是满的二叉树(如1中举例的图)

满二叉树:每一个节点都有零个或者两个子节点

完全二叉树:出最后一层外,每一层节点都是满的,并且最后一层节点全部从左排列

平衡二叉树:每个节点的两个子树的深度相差不超过1.

注:国内对完美二叉树和满二叉树定义相同

3.二叉树相关术语

术语 解释

度 节点的度为节点的子树个数

叶子节点度为零的节点

分支节点度不为零的节点

孩子节点节点下的两个子节点

双亲节点节点上一层的源节点

兄弟节点拥有同一双亲节点的节点

根 二叉树的源头节点

深度 二叉树中节点的层的数量

DLR(先序):

LDR(中序):

LRD(后序):

注意:L代表左子树R代表右子树;D代表根

6.深度优先遍历和广度优先遍历

深度优先遍历:前序、中序和后序都是深度优先遍历

从根节点出发直奔最远节点,

广度优先遍历:首先访问举例根节点最近的节点,按层次递进,以广度优先遍历上图的顺序为:1-2-3-4-5-6-7

三、面试题+励志

企鹅运维面试题:

1.二叉树遍历顺序:看上文

2.用你熟悉的语言说说怎么创建二叉树? python看上文