第1章第1节练习题5 无序表删除指定区间值

news/2024/5/20 8:08:25 标签: 数据结构, 算法, 顺序表

问题描述

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

算法思想">算法思想

注意理解题意,本题与练习题4是不同的,练习题4中说明了该顺序表逻辑上有序,而本题中,逻辑上无序,因此删除的时候不能采用与练习题4相同的解法。
本题可以从前往后扫描顺序表,用k表示值不在s和t之间的下标,则data[k]记录其值不在s和t之间的数。而当其值在s和t之间时,k的值保持不变;若不在s和t之间时,即本题中需要保留的数,对k进行自增;最后只需重置顺序表的表长即可。

算法描述">算法描述

void Delst(SqList *L, ElemType s, ElemType t){
    int k=0;
    for(int i=0;i<L->length;i++){
        if(L->data[i]>t||L->data[i]<s){
            L->data[k++]=L->data[i];
        }
    }
    L->length=k;
}

具体代码见附件


附件

#include<stdio.h>
#define MaxSize 100
typedef int ElemType;

typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

int Delst(SqList*, ElemType, ElemType); 
void print(SqList*); 
int main(int argc, char* argv[])
{
    SqList SL;
    SL.length=10;
    SL.data[0]=8;SL.data[1]=0;SL.data[2]=1;SL.data[3]=5;SL.data[4]=2;
    SL.data[5]=4;SL.data[6]=9;SL.data[7]=3;SL.data[8]=7;SL.data[9]=6;

    int flag;
    ElemType s=3, t=8;
    print(&SL);
    flag=Delst(&SL, s, t);
    print(&SL);
    if(flag==0){
        printf("Del success! \n");
    }else{
        printf("Del false! \n");
    }
    return 0;
}

int Delst(SqList *L, ElemType s, ElemType t){
    int k=0;
    if(s>t||L->length==0){
        printf("The number is illegal! \n");
        return -1;
    }
    for(int i=0;i<L->length;i++){
        if(L->data[i]>t||L->data[i]<s){
            L->data[k++]=L->data[i];
        }
    }
    L->length=k;
    return 0;
}

void print(SqList*L){
    for(int i=0;i<L->length;i++){
        printf("%d\t",L->data[i]);
    }
    printf("\n");   
}

http://www.niftyadmin.cn/n/1801511.html

相关文章

第1章第1节练习题6 删除重复值

问题描述 从有序表中删除所有其值重复的元素&#xff0c;使表中所有的元素的值均不同。 算法思想 注意此题中所提到的线性表是有序顺序表&#xff0c;那么值相同的元素一定在连续的位置上&#xff0c;既然这样&#xff0c;那么我们可以使用类似与练习题5的方法。对顺序表进行一…

用于多表更新

{-----------------------------------------------------------------------------单元文件: ADOXQuery 作者: 张峰林 建立日期: 2003-10-2310:55:30作用: 修改历史:-----------------------------------------------------------------------------}unit ADOXQuery;Int…

第1章第1节练习题7 顺序表的归并

问题描述 将两个有序的顺序表合并成一个新的有序顺序表&#xff0c;由函数返回结果顺序表 算法思想 本题实际就是归并排序的一种特殊情况&#xff0c;因为两个顺序表皆有序&#xff0c;这样我们只需要不断的取下两个顺序表中表头元素较小的那个数&#xff0c;然后将其存入新的顺…

基于EXCEL的WEB报表输出组件

HFSoft.Report是一个基于EXCEL的WEB报表输出组件&#xff0c;它的目标是快速灵活地建立EXCEL的报表文件。开发人员并不需要了解相关EXCEL&#xff08;COM&#xff09;、VBA等相关知识&#xff0c;只需要通过HFSoft.Report组件来编写输出模板&#xff0c;组件就会自动地根据模板…

一些好的网站

csdn社区: http://community.csdn.net/IBM开发中国: http://www-128.ibm.com/developerworks/cn/RadHat版本下载: ftp://166.111.121.3/Linux/RedHat/中国IT动力: http://www.chinaitpower.com/协议: http://www.protocols.com/中国协议分析网: http://www.cnpaf.net/全球voip联…

第1章第1节练习题8 顺序表循环移位

问题描述 描述1&#xff1a;已知在一维数组A[mn]中依次存放着两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,...,bn),试编写一个函数&#xff0c;将数组中两个顺序表互换&#xff0c;即将(b1,b2,b3,...,bn)放在(a1,a2,a3,...,am)的前面 描述2&#xff1a; 已知在一维数组A[mn]中依次…

无聊之胡思乱想 —— 关于CMM和CMMI

春节长假结束之后回到公司&#xff0c;我参加了有关CMMI的training。整个课程总有7个部分&#xff0c;涉及的内容十分广泛&#xff1a;从基于风险的项目管理到软件生命周期&#xff0c;再到项目计划和跟踪等等。而到上个星期为止&#xff0c;课程已经过半&#xff0c;而我对于C…

第1章第1节练习题9 查找指定值

问题描述 线性表(a1,a2,a3,...,an)中元素递增有序&#xff0c;且按顺序存储于计算机内。要求设计一算法完成用最少时间在表中查找数据值为x的元素&#xff1b;若找到&#xff0c;将其与后继元素位置交换&#xff1b;若找不到将其插入到表中&#xff0c;使表中的元素仍递增有序 …