2.1、开辟一个动态顺序表及初始化( 二 )


2.5、顺序表在pos处插入及删除数据
1、顺序表在pos处插入数据
顺序表在pos处插入数据是在数组中自定义位置插入数据 。先判断空间 , 再把要插入数据位置之后的数据向后挪动 , 然后插入数据 。
代码实现:
void SLInsert(SL* ps, int pos, SLDataType x){assert(ps);assert(pos >= 0);assert(pos <= ps->size);SLCheckCapacity(ps);int end = ps->size - 1;while (end >= pos){ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;}
若pox=ps->size , 则函数等价于尾插
若pox=0 , 则函数等价于头插
2、顺序表在pos处删除数据
顺序表在pos处删除数据是在数组中自定义位置删除数据 。把自定义位置处的数据向前挪动 , 覆盖要删除的数据 。
代码实现:
void SLErase(SL* ps, int pos){assert(ps);assert(pos >= 0);assert(pos < ps->size);// 挪动数据覆盖int begin = pos + 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;}
若pox=ps->size-1 , 则函数等价于尾删
若pox=0 , 则函数等价于头删
2.6、顺序表的销毁及打印
1、顺序表的销毁
由于动态顺序表开辟空间 , 所用的函数均是动态内存函数 , 所以使用完后需要释放空间
代码实现:
void SLDestroy(SL* ps){assert(ps);if (ps->a){free(ps->a);ps->a = NULL;ps->size = ps->capacity = 0;}}
2、顺序表的打印
代码实现:
void SLPrint(SL* ps){assert(ps);for (int i = 0; i < ps->size; ++i){printf("%d ", ps->a[i]);}printf("\n");}
2.7、顺序表的查找及修改
1、顺序表的查找
从begin处开始查找
代码实现:
int SLFind(SL* ps, SLDataType x, int begin){assert(ps);for (int i = begin; i < ps->size; ++i){if (ps->a[i] == x){return i;}}return -1;}
2、顺序表的修改
把pos处的数据修改成x
代码实现:
void SLModify(SL* ps, int pos, SLDataType x){assert(ps);assert(pos >= 0 && pos <= ps->size);ps->a[pos] = x;}