如何将线性表A拆分成线性表A和B,使得A存放奇数,B存放偶数?
1.基础函数
1.1 get取函数
int get(nod *la,int i)
{
return la->data[i];
}
1.2 insert插入函数
void insert(nod *la,int x,int j)
{
int i;
for(i=length;i>=j;i--)
{
la->data[i+1]=la->data[i];
}
la->data[j]=x;
la->len++;
}
1.3 Delete删除函数
void Delete(nod* la,int i)
{
int j;
for(j=i+1;j<=12;j++)
la->data[j-1]=la->data[j];
la->len--;
}
2. 主函数
思路不难,总的来说也就是一个简单的判断,如果该数可以被2整除,那么它就是整数;如果不能,它就是奇数。
此程序采用的是顺序表,这里有定义如下:
typedef struct node
{
int data[maxsize];//#define maxsize 1024
int len;
}nod;
2.1 清零
memset(la.data,0,sizeof(la.data));
memset(lb.data,0,sizeof(lb.data));
事实证明,清零和不清零,似乎没有什么大的区别。
2.2 循环判断
while(i<=la.len)
{
x=get(&la,i);
if(x%2==0)
{
insert(&lb,x,j);
j++;
Delete(&la,i);
}
else i++;
}
这里用&la,&lb
是因为之前定义的nod la,lb;
2.3 输出结果
for(i=1;i<=la.len;i++)
printf("%d ",la.data[i]);
putchar(10);
for(i=1;i<=lb.len;i++)
printf("%d ",lb.data[i]);
3. 代码
#include<stdio.h>
#include<string.h>
#define maxsize 1024
#define length 11
typedef struct node
{
int data[maxsize];
int len;
}nod;
int get(nod *la,int i)
{
return la->data[i];
}
void insert(nod *la,int x,int j)
{
int i;
for(i=length;i>=j;i--)
{
la->data[i+1]=la->data[i];
}
la->data[j]=x;
la->len++;
}
void Delete(nod* la,int i)
{
int j;
for(j=i+1;j<=12;j++)
la->data[j-1]=la->data[j];
la->len--;
}
int main()
{
nod la,lb;
memset(la.data,0,sizeof(la.data));
memset(lb.data,0,sizeof(lb.data));
int i,j;
for(i=1;i<=length;i++)
{
scanf("%d",&la.data[i]);
}
la.len=length;
lb.len=0;
i=j=1;
int x;
while(i<=la.len)
{
x=get(&la,i);
if(x%2==0)
{
insert(&lb,x,j);
j++;
Delete(&la,i);
}
else i++;
}
for(i=1;i<=la.len;i++)
printf("%d ",la.data[i]);
putchar(10);
for(i=1;i<=lb.len;i++)
printf("%d ",lb.data[i]);
return 0;
}
4.总结
第一次用typora写博客,一篇水文,当作试水吧。