文档介绍:?网络游戏算法设计?第2章算法分析与数据结构主要内容:学习目标:?第2章算法分析与数据结构?数组?链表概念?链表操作?掌握数组?了解链表概念?掌握链表操作重点:难点:?第2章算法分析与数据结构?数组?链表概念?链表操作?数组? 线性表线性表是这样的数据对象,其实例形式为:(e1 ,e2 ,... en ),其中n是有穷自然数。 e i是表中的元素,n是表的长度。元素本身的结构与线性表的结构无关。当n = 0时,表为空;当n > 0时,e1 是第一个元素,e n是最后一个元素线性表有两种存储方式:顺序表和链表。1)顺序表是把线性表的节点按逻辑次序存放在一组地址连续的单元里。它的特点是用物理位置上的邻接关系来表示节点间的逻辑关系,这一特点使用户可以随机存取表中的任意一个节点,但它也使得插入和删除操作会移动大量的节点。第2章算法分析与数据结构2)链表是用一组任意的存储单元(可以是连续的,也可以是不连续的)来存储线性表的各个数据元素。 线性表每个元素除了需要储藏自身信息外,还需要存储一个指示其后继元素的信息(即直接后继的存储位置),这两部分信息组成了一个数据元素的存储结构,称为一个节点。每个节点包括两个域:数据域和指针域。数据域存储数据元素本身的信息,指针域是后续节点的指针,最后一个节点的指针域为空指针。第一个节点称为首节点,它的地址存储在链表首节点指针中,链表中的每一个节点都是同一种结构类型。 。在顺序表的情况下,数组允许在表尾方便增加元素。但删除元素并不方便,因为此时必须频繁的移动各元素。若要插入新的元素,也必须移动元素的位置。 线性表bool DeleteArrayData(int array[], int size, int index){if(index < 0 || index >= size){cout << "数组下标越界" << endl;return false;}if(index == size - 1){array[index] = 0;return true;}for(int i = index + 1; i < size; i++){array[i-1] = array[i];}return true;} 线性表向数组中插入一个数值,则要把插入位置后面的每一个元素向后移动。空出要插入的位置, 线性表bool InsertArrayData(int array[], int size, int index, int data){if(index < 0 || index >= size){cout << "插入的位置错误" << endl;return false;}if(index == size - 1){array[index] = data;return true;}for(int i = size-1; i > index; i--){array[i] = array[i-1];}array[i] = data;return true;} 链表链表主要的优点就是可以方便的进行插入、删除操作,利用这一优点,可以在游戏设计过程中方便地管理大量的数据。在链表中的每个元素都放在节点中进行描述。节点不必是连续的物理单元。每个节点中都包含了与该节点相关的其他节点的位置信息。这种关于其他节点的位置信息被称之为链或指针。?链表概念