首页 > 其他分享 >王道_顺序表课后代码习题总结

王道_顺序表课后代码习题总结

时间:2022-10-02 22:26:20浏览次数:63  
标签:int ElemType 王道 ++ length 课后 习题 data 前移

顺序表

1.删除

主要在于删除后,后面元素怎样前移。

1.删除一个值

bool ListDelete(SqList &L, ElemType &e){
    if(i < 1 || i > L.length)
        return false;
    
    e = data[i-1];
    for(int j = i; j < L.length; j++)
        L.data[j-1] = L.data[j];
    L.length--;
    
    return 0;
}

2.删除一定范围的值

模板(通法,不追求完美复杂度):

①设置k值;记录符合要求的值(或者记录不符合要求的值,但通常时间复杂度要高,故不作讨论)

②如果符合要求,k++;

​ 如果不符合要求,前移k值;

int k = 0;	//记录要删去值的个数
int i = 0;

while(i < L.length){
    if(删除的条件)	//确定前移的个数
        k++;
    else	//前移操作
        L.data[i-k] = L.data[i];
    i++;
}

L.length -= k;	//更新顺序表

例题:

​ 1.在一个顺序表中删除值为x的元素,值为x的元素不唯一。

void del(SqList &L, ElemType x){
	int k = 0;	//记录要删去值的个数
    int i = 0;

    while(i < L.length){
        if(L.data[i] == x)	//确定前移的个数
            k++;
        else	//前移操作
            L.data[i-k] = L.data[i];
        i++;
    }

    L.length -= k;	//更新顺序表
}

2.在一顺序表(有序或无序)中删除所有s到t范围内的值。

void del(SqList &L, ElemType s, ElemType t){
	int k = 0;	//记录要删去值的个数
    int i = 0;

    while(i < L.length){
        if(L.data[i] >= s && L.data[i] <= t)	//确定前移的个数
            k++;
        else	//前移操作
            L.data[i-k] = L.data[i];
        i++;
    }

    L.length -= k;	//更新顺序表
}

针对有序数组,可利用s到t在同一区间进行操作

int Del(SqList &L, ElemType s, ElemType t){
    int i , j;
    
    if(s >= t || L.length == 0)
        return false;
    
    for(i = 0; i < L.length && L.data[i] < s; i++);
    
 	if(i >= L.length)
        return false;
    
    for(j = i; j < L.length && L.data[j] <= t; j++);
   	for(; j < L.lengthg; i++,j++)
        L.data[i] = L.data[j];
    
    L.length = i;
    
    return true;
}

3.对有序顺序表进行去重。

void del(SqList &L, ElemType s, ElemType t){
	int k = 0;	//记录要删去值的个数
    int i = 0;

    while(i < L.length){
        if(L.data[i] == L.data[i-1])	//确定前移的个数
            k++;
        else	//前移操作
            L.data[i-k] = L.data[i];
        i++;
    }

    L.length -= k;	//更新顺序表
}

标签:int,ElemType,王道,++,length,课后,习题,data,前移
From: https://www.cnblogs.com/sinowind/p/16749598.html

相关文章

  • csapp第一章练习题
    Amdahl定律我们定义α为加速部分占整个系统部分的比例k为性能加速比例,即加速后的性能比上加速前的性能由公式可知练习题1:A:根据定义理解,有α=1500/2500,k=150/100,可根......
  • 王道-数据结构-插入排序
    插入排序分为直接插入和折半插入排序直接插入排序折半插入排序1.算法思想用我自己的话说:一开始选中第二个元素,然后把之前的元素看做已经是排好序的,然后一直对......
  • 大家都学了joke亲传的高数了, 来道练习题吧
    求\[y=\frac{\sqrt{1+x}-\sqrt{1-x}}{\sqrt{1+x}+\sqrt{1-x}}\]的导数口也,不难,只是我至今能同时算出两种不等的答案,算上正解,一共有四种答案了,互不......
  • 动手动脑课后实验2
    一般初始化:1.没有继承静态变量、静态初始化块-->变量、变量初始化块–>构造方法2.有继承的情况父类静态变量、父类静态初始化块–>子类静态变量、子类静态初始化块–>......
  • 第三讲 类与对象 课后总结
    类的定义定义了一组大体上相似的对象。一个类所包含的方法和数据描述一组对象的共同行为和属性。对象则是类的具体化,是类的实例。类通过派生可以有子类,同样也可以有父类......
  • 《概率机器人》课后习题 第4章
    importnumpyasnpimportmatplotlib.pyplotasplt第一题第1问HF状态预测先回顾一下要用到的离散贝叶斯滤波算法。\[\begin{aligned}1:\quad&\textbf{Algorithm......
  • 信息技术_必修2_第2章_习题答案
    信息技术_必修2_第2章_习题答案_220929a活动册P381.单选题(1)信息系统是一个()。A.网络系统B.计算机系统C.操作系统D.人机交互系统【答案】D【解析】P3......
  • Java流程控制08(练习题)
    1.计算0到100之间的奇数和偶数的和packagecom.zhangyi.Cycle;//计算0到100之间的奇数和偶数的和publicclassCycleDemo02{publicstaticvoidmain(String[]ar......
  • luogu P5518 幽灵乐团 / 莫比乌斯反演基础练习题
    重新学习了一下莫比乌斯反演,再来写一次这道题。Part1\[\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\dfrac{\text{lcm}(i,j)}{\gcd(i,k)}\]\[=\prod_{i=1}^A\prod_{j=1}^B......
  • 面向对象编程中级部分习题
    1.作业1定义一个Person类{name,age,job},初始化Person对象数组,有3个person对象,并按照age从大到小进行排序,提示:使用冒泡排序.packagecom.yt.homwork.homework01;pub......