Java教程

《算法之美》 第三章:数据结构

本文主要是介绍《算法之美》 第三章:数据结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、数据结构基础
  • 二、数据结构分解
    • 1.数组
    • 2.链表
    • 3.栈
    • 4.队列
    • 5.树
    • 6.图
  • 总结


前言

好久没更,因为笔者前段时间处理了一些其他的问题,今天我们继续,走进《算法之美》第三章,数据结构。

同样,感兴趣的小伙伴不妨点点关注,等算法之没结束后,笔者将带大家开始机器学习的基础内容,敬请期待哦。


一、数据结构基础

何为数据结构?我们为什么要了解数据结构?数据结构如何使用呢?

为了解决问题,许多技术人员都潜心钻研更优秀的算法高效地解决问题,但是,高效的算法往往需要精巧的数据结构与之配合,合适的数据结构才能将算法的优势发挥的淋漓尽致。

将数据进行合理的规划分配,偏于处理众多的数据,这就是数据结构的用处所在。

接下来,我们就走进数据结构,了解多种多样的数据结构各自的优势所在。

二、数据结构分解

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.图

图可以用于模拟大量数据间较为错综复杂的关系,分为有序、戊戌两种,可以用邻接表实现。

图的两种搜索方式与遍历方式也会在后续实例中为大家详细介绍(深度、广度搜索)。


总结

数据结构与算法相辅相成,只需掌握常见的数据结构并熟练使用即可解决大多数算法问题。

这篇关于《算法之美》 第三章:数据结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!