线性表之顺序表
插入元素
在第i(1<=i<=n)个元素前插入一个元素,插入元素时,需要先将最后边的元素向后移一个位置,依次类推(共n-i+1个)
- 1—— 指针法:
12345678910111213141516171819202122 Status ListInsert_sq(SqList &L,int i, ElemType e){// 合法性if(i<1||i>L.length+1) return ERROR;//当前存储空间已满时,追加(重新分配)存储空间if(L.length>=L.listsize){newbase=(ElemType *)realloc(L.elem, // L.elem 表示原表地址(L.listsize+LISTNCREMENT)* sizeof(ElemType));if(!newbase)exit(OVERFLOW);L.elem=newbase; //将新分配的地址赋值给L.elemL.listsize+=LISTINCREMENT;}// 第i个元素的下标为'i-1', 'L.elem[i-1]'表示第i 个元素,'&(L.elem[i-1])'表示第i个元素的地址q = &(L.elem[i-1]); //q为插入位置// 'L.elem[L.length-1]'中'L.length-1'表示最后一个元素的下标,则L.elem[L.length-1]表示最后一个元素for(p=&(L.elem[L.length-1]); p>=q; --p;) //p为最后一个元素的地址* (p+1) = * p; //将元素向后移动* q=e; //插入e++L.length; //表长增1return OK;}
- 2—— 下标法:
123456789101112131415161718192021 Status ListInsert_sq(SqList &L,int i, ElemType e){// 合法性if(i<1||i>L.length+1) return ERROR;//当前存储空间已满时,追加(重新分配)存储空间if(L.length>=L.listsize){newbase=(ElemType *)realloc(L.elem, // L.elem 表示原表地址(L.listsize+LISTNCREMENT)* sizeof(ElemType));if(!newbase)exit(OVERFLOW);L.elem=newbase; //将新分配的地址赋值给L.elemL.listsize+=LISTINCREMENT;}// 第i个元素的下标为'i-1', 'L.elem[i-1]'表示第i 个元素,'&(L.elem[i-1])'表示第i个元素的地址q = &(L.elem[i-1]); //q为插入位置// j为下标,L.length-1 为最后一个元素的下标,从表最后一个元素循环到第i个元素for(j=L.length-1;j>=i-1;j++)L.elem[j+1]=L.elem[j]; //将元素向后移动一个位置* q=e; //插入e++L.length; //表长增1return OK;