【题目描述】
采用顺序表存储一批整数,去掉其中所有的偶数。
你的任务是创建一个顺序表,输入多个整数存入表中,删除其中的偶数,然后输出表中的所有数据。
【输入输出】
输入描述: 输入由两行组成
第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~