标签:第三章 self 之美 next 算法 数据结构 data def
文章目录
前言
好久没更,因为笔者前段时间处理了一些其他的问题,今天我们继续,走进《算法之美》第三章,数据结构。
同样,感兴趣的小伙伴不妨点点关注,等算法之没结束后,笔者将带大家开始机器学习的基础内容,敬请期待哦。
一、数据结构基础
何为数据结构?我们为什么要了解数据结构?数据结构如何使用呢?
为了解决问题,许多技术人员都潜心钻研更优秀的算法高效地解决问题,但是,高效的算法往往需要精巧的数据结构与之配合,合适的数据结构才能将算法的优势发挥的淋漓尽致。
将数据进行合理的规划分配,偏于处理众多的数据,这就是数据结构的用处所在。
接下来,我们就走进数据结构,了解多种多样的数据结构各自的优势所在。
二、数据结构分解
1.数组
当我们需要将一些彼此相关的数据存储在空间中,为了方便管理,我们习惯性地偏向于将这些数据存储在一起,即连续的内存地址中,这样可以极大方便我们调用与修改,这就是数组的初衷。
在内存中,每当我们需要使用数组时,便会在内存中开辟出一块连续的内存空间,用于存放一系列数据。
代码如下:
# Alkaid#3529
def array_demo():
grade = array([[89, 70, 93], [70, 25, 80], [20, 40, 10]])
for i in grade:
print(i)
2.链表
将相关的数据存储在连续的内存地址当中,固然方便杜宇,但是,如果我们想要添加或删除一些数据,就会导致大量的数据移动,并且,连续存放不利于内存空间的充分使用,因此,在此基础上,我们创造了一种新的数据结构,链表。
链表,顾名思义,将许多节点相连,形成一条链。
每个节点分别存储当前结点的值,以及下一个节点在内存中的地址,这样子,我们只需记录第一个节点,依次寻找,即可找到全部数据。
这样的数据结构可以极大方便我们对数据的存储,充分利用内存空间。
代码如下:
# Alkaid#3529
class Node(object):
def __init__(self, data=0, next=None):
self._data = data
self._next = next
def set_data(self, data):
self._data = data
def get_data(self):
return self._data
def set_next(self, next):
self._next = next
def get_next(self):
return self._next
3.栈
栈是一种特殊的数据结构,它只能在一段进行操作,因此也就导致了所谓“先进后出”的特点,这种数据结构通常可以用来做代码中括号配对、表达式求值等运算。
代码如下:
# Alkaid#3529
def stack_demo():
"""
栈
利用列表的函数来实现类似于栈的功能,append(),
:return:
"""
stack = []
for i in 'Alkaid#3529':
stack.append(i)
while stack:
print(stack.pop())
return None
4.队列
队列与栈类似,但是队列是一种可以两端操作的数据结构,一端只能进入,另一端只能输出,遵循先进先出的原则,我们可以利用Pycharm自带模块实现。
# Alkaid#3529
def queue_demo():
"""
队列
:return:
"""
s1 = "Alkaid#3529"
name = Queue()
for i in s1:
name.put(i)
while not name.empty():
print(name.get())
return None
5.树
树是一种较为高级的数据结构之一,它通过模拟树的形状来实现各个数据间的层级问题,可以更加直观方便的体现数据间的层次结构,方便查找、排序等操作。
典型的是二叉树结构,遍历方法分为先序、中序、后序、分层遍历。
此处就不对数进行更为深入的探讨了,后续会在相应的算法题目中进行实例使用。
6.图
图可以用于模拟大量数据间较为错综复杂的关系,分为有序、戊戌两种,可以用邻接表实现。
图的两种搜索方式与遍历方式也会在后续实例中为大家详细介绍(深度、广度搜索)。
总结
数据结构与算法相辅相成,只需掌握常见的数据结构并熟练使用即可解决大多数算法问题。
标签:第三章,self,之美,next,算法,数据结构,data,def 来源: https://blog.csdn.net/qq_51661256/article/details/123574847
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。