怎么将一个线性表(顺序表)拆分成两个奇偶表(C语言)?

如何将线性表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写博客,一篇水文,当作试水吧。

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值