【数据结构】顺序表应用---删除偶数

【题目描述】

采用顺序表存储一批整数,去掉其中所有的偶数。

你的任务是创建一个顺序表,输入多个整数存入表中,删除其中的偶数,然后输出表中的所有数据。

【输入输出】

输入描述: 输入由两行组成

第1行:输入个数n

第2行:输入n个整数

输出描述: 输出由两行组成

第1行:顺序表中数据个数

第2行:顺序表中的数据,每个整数用空格隔开。

【样例】

样例输入: 10 34 23 9 10 10 17 31 32 1 15

样例输出: 6 23 9 17 31 1 15

【步骤详解】

1.创建一个顺序表,为顺序表开辟空间

2.实现删除操作(图解如下)

【代码+注释】

#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
struct SqList{
    ElementType *Data;
    int N;
    int MaxSize;
};
//专门用一个函数创建空顺序表(和链表差不多其实,在实现链表操作前也需要创建一个链表,就是让数据按这个结构排好)
struct SqList *CreateList(int M){
    //传入M表示要有几个数据框
    struct SqList *L;
    //为整个顺序表开辟空间 
     L = malloc(sizeof(struct SqList));
     //为顺序表的数据开辟空间 
     L->Data=malloc(sizeof(ElementType)*M);
     //定义顺序表中的参数值 
     L->N=0;
     L->MaxSize=M;
     return L;
}; 

struct SqList* Delete(struct SqList *L){
    for(int i=0;i<L->N;i++){
        if(L->Data[i]%2==0){
            for(int j=i;j<L->N-1;j++)
            {
                L->Data[j]=L->Data[j+1];
            }
            L->N--;
            //如果两个偶数是连在一起的,那移动过后第i位依旧是偶数,所以i--检查再次检查第i位的情况 
            i--; 
        }
    }
    return L;
}


int main()
{
    struct SqList *L;
    int m;
    scanf("%d",&m);
    L=CreateList(m);
    int t;
    for(int i=0;i<m;i++)
    {
        scanf("%d",&t);
        L->Data[i]=t;
        L->N++;
    }
    
    Delete(L);
    printf("%d\n",L->N);
    //是i<L->N而不是i<m,这是因为L->N在变小而m没有变 
    for(int i=0;i<L->N;i++){
        printf("%d ",L->Data[i]);
    }
    
}

【注意事项】

如果两个偶数是连在一起的,那移动过后第i位依旧是偶数,所以需要i--检查再次检查第i位的情况 ,如图所示

 

今天的分享就到这里啦~~希望对您有所帮助!!下次再见啦~~ヾ( ̄▽ ̄)Bye~Bye~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值