为二维地图选择最佳数据结构,这将改变数据

问题描述

在实现更快的方式对二维数组进行完全移位的方式上,我需要一些帮助。

我的问题是我有一个二维数组,其中包含游戏的地图数据。该游戏有点像《几何破折号》,但在《 Game Boy Advance》中。到目前为止,我有一张看起来像这样的地图:

int map1[9][40] = {
    {0,0 },{0,1,2,{1,1 },};

但是要阅读此地图,我必须遍历每个元素,看看是否应将其绘制在屏幕上(x> = 0 && x

考虑一下,我应该使用双向链表。这样,我可以通过将标头节点移动到预告片来移动列表,然后仅绘制前15个节点的(或大约)数据。通过循环遍历2D数组中的每个元素是否会提高性能?虽然循环播放并不一定会破坏游戏性能,但我确实想对其进行优化。

如果是这样,我将如何实现这个双向链接列表以包含与2d数组相同的数据?

解决方法

首先使用双向链接列表将使性能变差。您当前的方法是我现在想到的最快的方法。首先,您需要了解数组以及链表如何在后台运行。对于数组,我强烈建议您观看this 5分钟的视频,因为用文本解释这会花费很长时间。了解数组的工作原理后,您需要将其与链表进行比较。当访问数组中的元素时,计算机所做的一切只是将内存地址增加索引乘以数组类型的大小然后取消引用该地址。访问或更好地说遍历链接列表时,您将做更多的事情。首先,您将取消引用该项目,然后处理数据,然后查看下一项是否为NULL,然后跳至下一项,取消引用该项目,依此类推。

简而言之,经验法则是:仅在不知道数组长度的情况下才使用链接列表。

现在您的问题。 如果要实现这样的2D链表,则您的结构应如下所示:

struct LinkedList {
    struct LinkedList* data;
    struct LinkedList* prev;
    struct LinkedList* next;

prevnext只是指向上一项和下一项的指针。实际数据将作为数据。

下面是一张图形,希望可以解释我的意思: enter image description here

因此,所有解析方法总比链表好。但是,我认为最快的解析将是即时解析。