抬头望树 2023-09-30 11:24 采纳率: 83.3%
浏览 283
已结题

6-4 顺序表区间删除

6-4 顺序表区间删除
分数 7
作者 ZXM
单位 西南石油大学
给定一个顺序存储的线性表,请设计一个函数删除所有值小于min和值大于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。

函数接口定义:
void Delete( List &L, ElementType minD, ElementType maxD );
L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较。函数Delete应将Data[]中所有值小于minD和值大于maxD的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,返回删除后的表。

裁判测试程序样例:

#include <stdio.h>
#define MAXSIZE 20
typedef int ElementType;
typedef int Position;
struct LNode {
    ElementType Data[MAXSIZE];
    Position last; /* 线性表的长度*/
};
typedef struct LNode List;
void Delete( List &L, ElementType minD, ElementType maxD );
List ReadInput()
{
   List L;
   int num,i,temp;
   scanf("%d",&num);
   for(i=0;i<num;i++)
   {
    scanf("%d",&(L.Data[i]));
   }
   L.last = num-1;
   return L;
}
void PrintList( List L )
{
     for(int i=0;i<=L.last;i++)
     {
          printf("%d ",L.Data[i]);
}
}

int main()
{
    List L;
    ElementType minD, maxD;
    int i;
    L = ReadInput();
    scanf("%d %d", &minD, &maxD);
    Delete( L, minD, maxD );
    PrintList( L );
    return 0;
}

/* 你的代码将被嵌在这里 */


输入样例:
在这里给出一组输入。例如:

10
4 -8 2 12 1 5 9 3 3 10
0 4
输出样例:
在这里给出相应的输出。例如:

4 2 1 3 3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

我的答案:提交后是 全在删除范围内这一项运行超时,应该怎么修改这个答案呢?

void Delete(List &L, ElementType minD, ElementType maxD ){
    int i=0;
    int j;
     int count=0;
    for(i=0;i<L.last+1;i++){
        while(L.Data[i]>maxD||L.Data[i]<minD){
            count++;
            for(j=i;j<L.last;j++){
                L.Data[j]=L.Data[j+1];
            }
            L.last--;
            i=0;
        }
        if(count==L.last){
        L.last=0;
    }
    }
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-30 14:05
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月14日
  • 已采纳回答 10月6日
  • 修改了问题 9月30日
  • 创建了问题 9月30日