//在第i个位置插入数据e实现思路:在保证不满和逻辑正确的情况下,将第i-1个元素开始,后面的元素往后移动一位(复制),然后将 //第i-1个元素赋值为e,并改变length,返回e //!!!这里其实可以返回一些错误代码,或者一些提示信息。或者正确的话不提示,错误的话返回可能出错的信息 public static int ListInsert(Sqlist L, int i, int e) { int k; /*线性表已满*/ if (L.length == MAXSIZE) { return(ERROR); } /*i不在范围内*/ if (i < 1 || i > L.length + 1) { return(ERROR); } /*如果插入数据位置不在表尾*/ if (i <= L.length) { /*将要插入位置后数据元素向后移动一位*/ for (k = L.length - 1; k >= i - 1; k--) { L.data[k + 1] = L.data[k]; } } /*将新元素插入*/ L.data[i - 1] = e; L.length++; return(e); }
//删除第i个位置数据的思路:(默认满足符合逻辑),然后将后面的数据统一往前移,复制(覆盖) public static int ListDelete(Sqlist L, int i) { int k; /*线性表为空,个人认为这里应该抛出一个自定义异常,而非int类型的ERROR,因为返回删掉的值会更加合理*/ if (L.length == 0) { return(ERROR); } /*删除位置不正确*/ if (i < 1 || i > L.length) { return(ERROR); } int e = L.data[i - 1]; /*如果删除的不是最后位置*/ if (i < L.length) { /*将删除位置后继元素前移*/ for (k = i; k < L.length; k++) { L.data[k - 1] = L.data[k]; } } L.length--; return(e); }
/*i从1开始*/ //获取元素思路:直接返回第i-1个数组元素 public static int GetElem(Sqlist L, int i) { if (L.length == 0 || i < 1 || i > L.length) { return(ERROR); } int e = L.data[i - 1]; return(e); }