第二章线性表——2.2:线性表的顺序表示和实现
在上一节中我们大概讲了下线性表,但是在计算机中,一个元素的所占的空间并不都是1个存储单元。
所以我们假设线性表中的每个元素需要消耗L个存储单元,并且一第一个单元的存储地址作为首地址,则第i+1个元素和第i个元素的存储位置关系就相差L个单元,第一个元素和第i个元素之间也就相差(i-1)*L个单元。
像这样每个元素存储的地址是相邻的存储方式,我们称其为顺序存储结构。在这样的结构中,只要我们知道第一个元素的地址,那么任何一个元素的地址都能找到。
例2.3在我们高级程序设计语言中,我们通常使用结构来进行顺序存储。
#define chushi 100
#define zengjia 10
typedef struct
{
elemtype* elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配长度
}a;
然后建立一个使用结构的线性表。
Status initlist_sx(a& l)
{
l.elem = (elemtype*)malloc(chushi * sizeof(elemtype));
if (!l.elem) exit(overflow);
l.length = 0;
l.listsize = chushi;
return ok;
}
因为同样是顺序存储结构,线性表中找到第i个元素是从第一个元素开始找的,所以结构的顺序存储结构的插入和删除元素如下。
例2.4 我们先进行元素的插入,在第i个元素之前插入一个元素。
Status initlist_sx(a& l, int i, elemtype e)
{
if (i<<