void spilit(seqlist a1,seqlist *a2, seqlist *a3)
将顺序表a1分裂成两个顺序表a2与a3,a2由表a1中的所有奇数组成,a3由表a1中的所有偶数组成。
#include<stdio.h>
#include<malloc.h>
typedef struct Linknode Link;
struct Linknode
{
int date;
Link *next;
};
void Print(Link *seqlist);
void Add(Link **seqlist);
void Spilt(Link *seqlist, Link **seqlist1, Link **seqlist2);
int main()
{
Link *seqlist, *seqlist1, *seqlist2;
seqlist=NULL;
Add(&seqlist);
Spilt(seqlist, &seqlist1, &seqlist2);
printf("链表1的数据如下:\n");
Print(seqlist1);
printf("链表2的数据如下:\n");
Print(seqlist2);
return 0;
}
void Add(Link **seqlist)
{
int n, i=0;
Link *p;
printf("输入要增加节点的数量:\n");
scanf("%d", &n);
printf("输入数据:");
for(i=0; i<n; i++)
{
p=(Link *)malloc(sizeof(Link));
scanf("%d", &(p->date));
p->next=*seqlist;
*seqlist=p;
}
}
//打印链表数据
void Print(Link *seqlist)
{
Link *p;
for(p=seqlist; p!=NULL; p=p->next)
printf("%d\t", p->date);
printf("\n");
}
//分裂顺序表
//入口参数:seqlist是主链表,seqlist1和seqlist2是分裂后的链表
void Spilt(Link *seqlist, Link **seqlist1, Link **seqlist2)
{
if(seqlist==NULL){
printf("Can't Spilt!");
return;
}
*seqlist1=NULL;
*seqlist2=NULL;
Link *p, *p1, *p2;
for(p=seqlist; p!=NULL; p=p->next)
{
if(p->date%2==1)
{
p1=(Link *)malloc(sizeof(Link));
p1->date=p->date;
p1->next=*seqlist1;
*seqlist1=p1;
}
else
{
p2=(Link *)malloc(sizeof(Link));
p2->date=p->date;
p2->next=*seqlist2;
*seqlist2=p2;
}
}
}