zoukankan      html  css  js  c++  java
  • 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;
    }
    


  • 相关阅读:
    Delphi单元文件之-防止程序重复执行
    cxGrid使用汇总2
    Delphi数组复制
    cxGrid使用汇总1
    Delphi XE5 android 获取网络状态
    xe5 android sample 中的 SimpleList 是怎样绑定的
    XE5 Android 开发数据访问手机端 解决乱码的办法
    设计模式之代理模式
    设计模式之单例模式及原型模式
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989398.html
Copyright © 2011-2022 走看看