//如何存储
typedef struct
{
ElementType Data[MAXSIZE];
int Last;
}List;
List L, *PtrL;
访问下标为i的元素:L.Data[i] 或 PtrL->Data[i]
线性表的长度:L.Last+1 或者 PtrL->Last+1
List *MakeEmpty()
{
List *PtrL;
PtrL = (List *)malloc(sizeof(List));
PtrL->Last = -1;
return PtrL;
}
int Find(ElementType X, List *PtrL)
{
int i = 0;
while(i<=PtrL->Last && PtrL->Data[i]!=X)
i++;
if (i > PtrL->Last)
return -1;
else
return i;
}
查找成功的平均比较次数为(n+1)/ 2(第一次比较就找到或者最后一次比较才找到),平均时间性能为O(n)。
插入到第 i 个位置(即下标+1:1<=i<=n+1)上插入一个值为X的新元素)

//插入
void Insert(ElementType X, int i, List *PtrL)
{
if (PtrL->Last == MAXSIZE-1)
{
printf("表满");
return;
}
if (i < 1 || PtrL->Last+2)
{
printf("位置不合法");
return;
}
for (int j = PtrL->Last; j >= i-1; --j)
{
PtrL->Data[j+1] = PtrL->Data[j]; //将 an~a1 依次向后移动一位
}
PtrL->Data[i-1] = X;//插入新元素
PtrL->Last++; //Last仍指向最后元素
return;
}

//删除
void Delete(int i, List *PtrL)
{
if (i < 1 || i > PtrL->Last+1)
{
printf("不存在第 %d 个元素", i );
return;
}
for (j = i; j <= PtrL->Last; ++j)
{
PtrL->Data[j-1] = PtrL->Data[j]; //将ai+1~an顺序向前移动
}
PtrL->Last--;
return;
}
平均移动次数为(n-1)/2,平均时间性能为O(n)。
原文:http://www.cnblogs.com/claremore/p/4721888.html