编写出一个高效率的处理程序,就需要解决如何合理地组织数据,建立合适的数据结构,设计较好的算法,来提高程序执行效率这样的问题。数据结构和算法就是在此背景下形成和发展起来的。瑞士著名的计算机科学家尼古拉斯·沃思(Niklaus·Wirth)提出了“算法+数据结构=程序”的观点,这正说明了数据结构的重要性。
一、 逻辑结构:
线性结构(一对一):除第一个和最后一个数据元素外,每个数据元素只有一个前驱和一个后继数据元素。
树结构:(一对多)除根结点外,每个数据元素只有一个前驱数据元素,可有0个或若干个后继数据元素。
图结构:(多对多)每个数据元素可有0个或若干个前驱数据元素和0个或若干个后继数据元素。
二、 数据的存储结构
顺序存储结构:把数据元素存储在一块连续地址空间的内存中,其特点是逻辑上相邻的数据元素在物理上也相邻,数据间的逻辑关系表现在数据元素存储位置关系上。
指针是指向物理存储单元地址的变量。由数据元素域和指针域组成的一个结构体称为结点。
链式存储结构:使用指针把相互直接关联的结点(即直接前驱结点或直接后继结点)链接起来,其特点是逻辑上相邻的数据元素在物理上不一定相邻,数据间的逻辑关系表现在结点的链接关系上。
① 图(a)是顺序存储结构,当在第i个元素前插入e时,e后面的元素全部都要跟着往后移动一个元素。
② 图(b)是链式存储结构,单链表的插入可以直接修改指针域,不用移动其它元素。声明一个指针pre指向链表头结点,初始化j从1开始;当j<i-1时,就遍历链表,让pre的指针向后移动,目的就是让pre指向第i个元素的前一个指针;结点s插入单链表第i个位置如下图所示,单链表的插入语句s->next=pre->next;pre->next=s;
上面叙说了顺序存储结构和链式存储结构的特点,顺序存储的优点是存储密度大,存储空间利用率高,便于随机存储。缺点是插入或者删除元素时不方便,因为插入删除一个元素需要移动其后的所有元素。但是链表不存在这个问题,链表只要改变指针就行,时间复杂度小,所以链表与顺序表恰恰相反,链表的优点是便于结点的插入删除等操作,缺点是随机存储没有顺序表方便。