标题:线性表元素的区间删除
只看楼主
黑暗骑士5DSB
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2020-3-23
结帖率:50%
 问题点数:0 回复次数:1 
线性表元素的区间删除
给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。
要求完成的函数接口定义:
List Delete(List L,ElementType minD,ElementType maxD);/*区间删除*/
void PrintList(List L); /*输出显示 */
其中List结构定义如下:

typedef int Position;
typedef struct LNode *List;
struct LNode{
  ElementType Data[MAXSIZE];
  Position Last; /*保存线性表中最后一个元素的位置*/
};

区间删除功能说明:L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较;minD和maxD分别为待删除元素的值域的下、上界。函数Delete应将Data[]中所有值大于minD而且小于maxD的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后返回删除后的表。

裁判测试程序样例:

#include <stdio.h>
#define MAXSIZE 20
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
struct LNode{
  ElementType Data[MAXSIZE];
  Position Last; /*保存线性表中最后一个元素的位置 */
};
List ReadInput(); /*输入,元素从下标0开始存储,注意这里*/
void PrintList(List L); /*输出显示*/
List Delete(List L,ElementType minD,ElementType maxD);
int main()
{
    List L;
    ElementType minD,maxD;
    int i;
    L=ReadInput();
    scanf("%d %d",&minD,&maxD);
    L=Delete(L,minD,maxD );
    PrintList( L );
    return 0;
}
List ReadInput()
{
List L=(List)malloc(sizeof(struct LNode));
int i,n;
scanf("%d",&n);
L->Last=n-1;
for(i=0;i<=L->Last;i++)
scanf("%d ",&(L->Data[i]));
return L;
}

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


输入格式:

输入3行,第一行为数据总个数,第二行为对应的数据(用空格分隔),第三行为min和max的值

输出格式:

输出结果用空格分隔,最后一数据后面要有空格

输入样例:
10
4 -8 2 12 1 5 9 3 3 10
0 4
输出样例:
4 -8 12 5 9 10




下面是答案,大神帮忙看看哪里有问题
List Delete( List L, ElementType minD, ElementType maxD ){
    Position rear=0,cur;
    int cnt=0;
    for(cur=0;cur<=L->Last;cur++){
        if(L->Data[cur]<=minD||L->Data[cur]>=maxD){
            L->Data[rear] = L->Data[cur];
            cnt++;
            rear++;
        }
    }
    L->Last=cnt-1;
    return L;
}
搜索更多相关主题的帖子: int 元素 List 删除 Data 
2021-04-04 11:47
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
struct LNode{
  ElementType Data[MAXSIZE];
  Position Last; /*保存线性表中最后一个元素的位置 */
};

List ReadInput()
{
List L=(List)malloc(sizeof(struct LNode));
int i,n;
scanf("%d",&n);
L->Last=n-1;
for(i=0;i<=L->Last;i++)
scanf("%d ",&(L->Data[i]));
return L;
}
void PrintList(List L){
    /*输出显示*/
for(int i=0;i<=L->Last;i++)
printf("%d ",L->Data[i]);
    
}
List Delete(List L,ElementType minD,ElementType maxD);
int main()
{
    List L;
    ElementType minD,maxD;
    int i;
    L=ReadInput();
    scanf("%d %d",&minD,&maxD);
    L=Delete(L,minD,maxD );
    PrintList( L );
    return 0;
}
List Delete( List L, ElementType minD, ElementType maxD ){
    Position rear=0,cur;
    int cnt=0;
    for(cur=0;cur<=L->Last;cur++){
        if(L->Data[cur]<=minD||L->Data[cur]>=maxD){
            L->Data[rear] = L->Data[cur];
            cnt++;
            rear++;
        }
    }
    L->Last=cnt-1;
    return L;
}

剑栈风樯各苦辛,别时冰雪到时春
2021-04-04 12:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505336-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015028 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved