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); }