基础结构:
#define MAXSIZE 100 typedef struct seqlist { int List[MAXSIZE]; int length; }SeqList;
模型建立之后,就可以创建一个实在的东西
SeqList L;
现在需要对线性表进行初始化操作,这里用的是把length置为0。
void InitList(SeqList &L) { L.length=0; }
插入操作
主要有三个部分
[1] 插入之前,进行判定。这个判定又分两种情况:<1>插入元素的位置是否合法? 这里,合理的范围是在[1,L->length+1]之间,比如,在第5个位置插入,这里指的是序号。<2>线性表是否已满 ?如果表已满,就不能再进行插入操作,判定为:L.length>=MAXSIZE
if(i<1 || i>L.length+1) { cout<<"超出位置范围"<<endl; return -1; } else if(L.length>=MAXSIZE) { cout<<"表已满"<<endl; return -1; }
[2]移动数据。对于插入来说,是先从后面移动,直到位置i。
借用一个变量j进行移动,这里序号和编号就缠绕在一起。
for(j=L.length;j>=i;j--) /*元素移动*/ L.List[j]=L.List[j-1];
[3]将元素赋值,最后将length+1;
int InsertElem(SeqList &L,int i,int e) { int j; if(i<1 || i>L.length+1) { cout<<"超出位置范围"<<endl; return -1; } else if(L.length>=MAXSIZE) { cout<<"表已满"<<endl; return -1; } for(j=L.length;j>=i;j--) /*元素移动*/ L.List[j]=L.List[j-1]; L.List[i-1]=e; L.length++; /*插入数据后,不能忘记将length+1*/ return 0; }
删除操作:
和插入类似,也需要进行几步操作, [1] 判定范围 [2]删除操作 [3]线性表长度减1;
int DeleteList(SeqList &L,int i,int *e) { int j; if(L.length<=0) /*线性表为空*/ return -1; else if(i<1 || i>L.length) /*超越范围*/ return -1; *e=L.List[i-1]; for(j=i;j<=L.length-1;j++) L.List[j-1]=L.List[j]; L.length--;/*线性表长度减1*/ return 0; }
for(j=i;j<=L.length-1;j++),在这一句中,经过计算,如果删除末位的元素,则不会产生移动,而只执行L.length--;
此外,判定条件也可以合并:
if(i<1 || i>L.Length || L.Length<=0) return -1;