• YTU 2986: 删除区间内的元素(线性表)


    2986: 删除区间内的元素(线性表)

    时间限制: 1 Sec  内存限制: 2 MB
    提交: 8  解决: 3

    题目描述

    若一个线性表L采用顺序存储结构,其中元素都为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1). 

    顺序表定义为:

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

    需编写的算法为:

    bool Delete(SqList *&L,ElemType x,ElemType y);

    注意:只需提交删除区间内元素的算法Delete部分。

    输入

    输入的第一行代表线性表的长度n,n<=SizeMax。第二行输入n个元素并插入到线性表中,第三行输入两个整数x,y,确定区间。

    输出

    输出的数据占两行,第一行是删除之后线性表的长度length,接下来的一行是线性表中的每个元素。

    样例输入

    10
    5 3 6 2 1 9 8 7 4 0
    3 7

    样例输出

    5
    2 1 9 8 0

    提示

    1、请使用C++编译并提交


    2、只需提交删除区间内元素算法的部分


    3、注意区间端点值是否合理



    迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……


    算法部分:
    bool Delete(SqList *&L,ElemType x,ElemType y)
    {
        if(x>y)return false;
        int n=L->length;
        for(int i=0,j=0; i<n; i++)
        {
            if(L->data[i]>=x&&L->data[i]<=y)L->length--;
            else L->data[j++]=L->data[i];
        }
        return true;
    }


    完整代码:
    #include <stdio.h>
    #include <stdlib.h>
    #define SizeMax 10000
    typedef int ElemType;
    typedef struct
    {
        ElemType data[SizeMax];
        int length;
    } SqList;
    void CreateList(SqList *&L,ElemType n)
    {
        if(n>SizeMax)return;
        L=(SqList*)malloc(sizeof(SqList));
        for(int i=0; i<n; i++)
            scanf("%d",&L->data[i]);
        L->length=n;
    }
    bool Delete(SqList *&L,ElemType x,ElemType y)
    {
        if(x>y)return false;
        int n=L->length;
        for(int i=0,j=0; i<n; i++)
        {
            if(L->data[i]>=x&&L->data[i]<=y)L->length--;
            else L->data[j++]=L->data[i];
        }
        return true;
    }
    void Print(SqList *L)
    {
        int i;
        printf("%d
    ",L->length);
        for(i=0; i<L->length; i++)
            printf(i!=L->length-1?"%d ":"%d
    ",L->data[i]);
    }
    void DestroyList(SqList *&L)
    {
        free(L);
    }
    int main()
    {
        SqList *L;
        ElemType n,x,y;
        scanf("%d",&n);
        CreateList(L,n);
        scanf("%d%d",&x,&y);
        if(Delete(L,x,y))
            Print(L);
        DestroyList(L);
        return 0;
    }
    


  • 相关阅读:
    如何在获取celery中的任务执行情况
    python flask接口开发和入参的三种方式args、values、json
    python3 redis数据库写入方法和json格式的坑
    python3 封装好的时间戳转换函数,可直接使用
    python3 *args 、 **args 在函数定义和调用中的应用
    python中剔除字典重复项,可以使用集合(set)。
    python3 文件读写操作中的文件指针seek()使用
    jmeter数据库连接配置
    Python自动化培训第一周学习总结
    jmeter分布式压测
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989398.html
Copyright © 2020-2023  润新知