线性表——顺序表现和实现
1.向当前线性表插入数据
Status ListInsert_Sq(SqList &L,int i,ElemType e) { if(i<1||i>L.length+1) return ERROR; //i不合格 if(L.length>=L.listsize) { newbase=(ElemType*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType)); //重新分配存储空间 if(!newbase) exit(OVERFLOW); //如果分配空间失败 L.elem=newbase; //新基址 L.listsize+=LISTINCREMENT; //增加存储容量 } q=&(L.elem[i-1]); //q为插入位置 for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; //插入位置元素之后的元素全部后移 *q=e; //插入元素 ++L>length; //表长加1 return OK; }
2.下面是删除线性表中的元素的操作
Status ListDelete_Sq(SqList &L,int i,ElemType &e) { if((i<1)||(i>L.length)) return ERROR; //i值不合格 p=&(L.elem[i-1]); //要删除的地址 e=*p; //要删除元素赋值给e q=L.elem+L.length-1; //表尾元素位置 for(++p;p<=q;++p) *(p-1)=*p; //被删除元素之后的元素往前移 --L.length; //表长减1 return OK; }
3.线性表中的元素合并操作
void MergeList_Sq(SqList La,SqList Lb,SqList &Lc) { pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem) exit(OVERFLOW); //如果分配内存失败 pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last) //合并 { if(*pa<=*pb) *pc++=*pa++; else *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++; //插入La的剩余元素 while(Pb<=pb_last) *pc++=*pb++; //插入Lb的剩余元素 }