2.2.3-4

有序顺序表中删除 s 与 t (s<t)之间的所有元素,若s 或者 t 不合理 或 顺序表为空,提示错误并返回

//删除从s到t之间的元素
/*
void Dele_s_t(Sq &L,int s,int t){
   //应该也需要判断 s 与 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之间的元素 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++); if(i>=L.length)return; for(j=i;j<L.length && L.A[j]<=t;j++); if(j>=L.length)return;
  //将元素前移 for(;j<L.length;j++){ L.A[i] = L.A[j]; i++; } L.length = i; }

 

上一篇:六种内排序


下一篇:bzoj 4530: [Bjoi2014]大融合【LCT】