数据结构基本知识——顺序表代码训练1

108 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

1.删除最小值

题目

从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

代码

bool Delet_Min(SqList &L, ElemType &e){
    if(L.length == 0){
        return false;
    }
    int minIdx = 0;
    ElemType minElem = L.data[0];
    for(int i=1; i < L.length; i++){
        if(L.data[i] < minElem){
            minElem = L.data[i];
            minIdx = i;
        }
    }
    e = minElem;
    L.data[i] = L.data[L.length-1];
    L.length--;
    return true;
}

2.逆置

题目

设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)

代码

bool ListReverse(SqList &L){
    for(int i=0; i < L.length / 2; i++){
        ElemType tmp = L.data[i];
        L.data[i] = L.data[L.length-1-i];
        L.data[L.length-1-i] = tmp;
    }
    return true;
}

3.删除值为x的元素

题目

对长度为n的顺序表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。

代码

void Delet_X(SqList &L, ElemType x){
    int pos=0;
    int length=0;
    for(int i=0; i < L.length; i++){
        if(L.data[i] != x){
            L.data[pos++] = L.data[i];
            length++;
        }
    }
    L.length = length;
}

4.有序表范围删除

题目

从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。

代码

bool Delet_S2t(SqList &L, Elemtype s, ElemType t){
    if(s >= t || L.length == 0){
        return false;
    }
    int pos=0;
    while(pos < L.length && L.data[pos] < s){
        pos++;
    }
    if(pos >= L.length){
        return false;
    }
    int pos1 = pos;
    while(pos1 < L.length && L.data[pos1] <= t){
        pos1++;
    }
    int length = pos;
    for(int i=pos1; i < L.length && pos < pos1; i++){
        L.data[pos++] = L.data[i];
        length++;
    }
    L.length = length;
    return true;
}

5.顺序表范围删除

题目

从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。

代码

void Delet_S2t(SqList &L, Elemtype s, ElemType t){
    int pos=0;
    int length=0;
    for(int i=0; i < L.length; i++){
        if(L.data[i] < s || L.data[i] > t){
            L.data[pos++] = L.data[i];
            length++;
        }
    }
    L.length = length;
}