线性表9 - 数据结构和算法14
线性表9
让编程改变世界
Change the world by program
静态链表
这一节课,我们试图通过静态链表的讲解来瞻仰古人的伟大!(似乎人总要挂了之后才能变得伟大~_~) 神马是静态链表呢?又跟古人能有半毛钱关系? 地球人都知道C语言是个伟大的语言,他的魅力在于指针的灵活性,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便。(面向对象使用对象引用机制间接地实现了指针的某些功能) 但是古人还木有C语言丫,木有JAVA丫,只有原始的Basic,Fortran等早期的编程语言,这些语言没有类似于C的指针功能,但是他们又想描述单链表,就没法实现了,怎么办呢? 真是不得不佩服他们的智慧,有人想出了用数组代替指针来描述单链表。大家能猜一猜他们是如何做到的么? 在讲解原理之前,先让大家知道这种用数组描述的链表叫做静态链表,这种描述方法叫做游标实现法。 [caption id="attachment_1900" align="alignnone" width="580"] 静态链表[/caption] 线性表的静态链表存储结构 [codesyntax lang="c"]#define MAXSIZE 1000 typedef struct { ElemType data; // 数据 int cur; // 游标(Cursor) } Component, StaticLinkList[MAXSIZE];[/codesyntax] 对静态链表进行初始化相当于初始化数组: [codesyntax lang="c"]
Status InitList(StaticLinkList space) { int i; for( i=0; i < MAXSIZE-1; i++ ) space[i].cur = i + 1; space[MAXSIZE-1].cur = 0; return OK; }[/codesyntax]
小甲鱼备忘录:
我们对数组的第一个和最后一个元素做特殊处理,他们的data不存放数据。 我们通常把未使用的数组元素称为备用链表。 数组的第一个元素,即下标为0的那个元素的cur就存放备用链表的第一个结点的下标。 数组的最后一个元素,即下标为MAXSIZE-1的cur则存放第一个有数值的元素的下标,相当于单链表中的头结点作用。