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;
}

 

posted @ 2019-05-22 10:38  青墨  阅读(161)  评论(0)    收藏  举报