自学内容网 自学内容网

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

【题目描述】

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

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

【输入输出】

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

第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~


原文地址:https://blog.csdn.net/2301_79982543/article/details/142832458

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!