怎么将一个线性表(顺序表)拆分成两个奇偶表(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写博客,一篇水文,当作试水吧。

上一篇:BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系(转)


下一篇:CCF 201912-2 回收站选址