C语言定义:
#define maxsize 线性表肯定达到的最大长
typedef struct //结构体
{
? ElemType elem[maxsize];
? int length;
}SeqList;
SeqList L;或
SeqList *L;
注意:区分元素的序号和数组的下标,如a1的序号为1,而其对应的数组元素L.elem[0]。或者不使用下标为0的单元,序号和下标保持一致,多占用一个元素空间即可。
基本运算:
①查找操作
按序号查找GetData(L,i);要求查找线性表L中第i个元素,其结果是L.elem[i]。
按内容查找Locate(L,x);要求查找线性表L中与给定值x相等的元素则返回该元素在表中的序号;若找不到,则返回一个“空序号”,如-1。
int Locate(SeqList L,ElemType x)
{
int i = 1;
while((i<=L.length)&&(L.elem[i]!=x))
i++;
if(i<=L.length) ? return(i);
else ? ? ? ? ? ? return(-1);
}
②插入操作
是指在表的第i个位置,插入一个新元素e,使长度为n的线性表(e1,e2,e3,...,en)变成长度为n+1的线性表(e1,e2,e3,x,en)。
eg:线性表4,9,15,28,30,30,42,51,62需要按序插入21→4,8,15,21,28,30,30,42,51,62
#define OK 1
#define ERROR 0
int InsList(SeqList*L,int i,ElemType x)
{
int k;
if ((i < 1) || (i>L->length+1))
{
printf("插入位置");
return(ERROR!!!);
}
if(L->length>=maxsize-1)
{
printf("表已满无法插入");
return(ERROR!!!);
}
for(k=L->length;k>=i;k--)//从最后一个往前移
? L->elem[k+1]=L->elem[k];
L->elem[i]=x;
L->length++;
return(OK);
}
③删除操作
int DelList(SeqList *L,int i,ElemType *e)
{
? int k;
? if((i<1)||(i>L->length))
? {
? ? printf("删除位置不合法!");
? ? return(ERROR!!!);
? }
? *e=L->elem[i];//时间复杂度:O(n)
? for(k=i;k<=L->length-1;k++)
? ? L->elem[k]=L->elem[k+1];
? L->length--;
? return(OK);
}
|