顺序表的插入和删除(基于c语言)
插入:在下标p处插入数据x;返回是否成功(0/1)
几个注意点:1.还能否插入数据;2.给的下标p是否是错误的以及p的范围;3.移动时的易错点(从下标大的元素开始);4.n与palist->n;elelmen[p]与palist->element[p]
int insertPre_seq(PSeqList palist,int p,DataType x){ int q; //两种退出情况 if (palist->n >= palist->MAXNUM){ printf("OVERFLOW!"); //1.顺序表中存入的数据已经满了 return 0; } if (p<0 || p>palist->n){ printf("WRONGNUM"); //2.下标不存在 return 0; } for (q=palist->n-1;q>=p;q--){ //移动时从下标大的元素开始,如果从下标小的地方开始,后续的数据全部变成原来的palist->element[p] palist->element[q+1] = palist->element[q]; } palist->element[p] = x; palist->n = palist->n + 1; return 1; }
在写程序的时候经常会不由自主地写成n而不是正确的palist->n;
主要就是能够理解为什么要从下标大的元素开始,后面还会有从下标小的元素开始。
删除:
int deleteP_seq(PSeqList palist,int p){ int q; if (p<0 || p>=palist->n){ printf("WRONGNUM!"); //一种退出情况,就是输入有问题 return 0; } for (q=p;q<palist->n-1;q++){ palist->element[q] = palist->element[q+1]; //移动从下标小的元素开始 } palist->n = palist->n - 1; return 1; }
删除理解起来比插入简单。
书中未给出的另一种插入和删除后续给出