2.2.3-4
有序顺序表中删除 s 与 t (s<t)之间的所有元素,若s 或者 t 不合理 或 顺序表为空,提示错误并返回
//删除从s到t之间的元素 /* void Dele_s_t(Sq &L,int s,int t){ if(s>t || s<1 || t>L.length || L.length == 0){ printf("错误\n"); return; } int k=0; for(int i=0;i<L.length;i++){ if(L.A[i]<s || L.A[i]>t){ L.A[k] = L.A[i]; k++; } } L.length = k; } 因为表的结构是顺序表 所有 从 s到t 之间的元素应该是相连的关系 只需要找到 第一个比s大 和 第一个比t大 的元素位置 之后 将两个位置之间的 元素 向前移动即可 */ //优化删除从s-t (不包含s,t)之间的元素 void Dele_s_t(Sq &L,int s,int t){ int i,j; if(s>=t || L.length==0)return; for(i=0;i<L.length && L.A[i]<=s;i++); //若i 为最后一位元素 或者未找到 返回 if(i>=L.length)return; for(j=i;j<L.length && L.A[j]<t;j++); //j = 2 printf("%d %d\n",i,j); if(j>=L.length)return; for(;j<L.length;i++,j++){ L.A[i] = L.A[j]; } L.length = i; }

浙公网安备 33010602011771号