69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct list{
int xishu,zhishu,dat;//定义系数、指数、dat(这个后面要用到,随便起了个名字)
struct list *next;
}data;
void Greatlist(data *head);//尾插发创造链表
void sor_t(data *head0,data *head1,data *head2);
void print(data *head2);//输出head2
int main(void)
{
data *head0,*head1,*head2;
head0 = (data *)malloc(sizeof(data));
head1 = (data *)malloc(sizeof(data));
head2 = (data *)malloc(sizeof(data));
head0->next = NULL,head1->next = NULL,head2->next = NULL;
Greatlist(head0);
Greatlist(head1);
sor_t(head0,head1,head2);
print(head2);
return 0;
}
void Greatlist(data *head)
{
int n;
scanf("%d",&n);
data *p,*pre = head;
while(n--)
{
p = (data *)malloc(sizeof(data));
scanf("%d%d",&p->xishu,&p->zhishu);
pre->next = p;
pre = p;
}
pre->next = NULL;
}
void sor_t(data *head0,data *head1,data *head2)
{
data *p2,*pre0 = head0,*pre1 = head1,*pre2 = head2;
pre0 = head0->next,pre1 = head1->next;
if(pre0->zhishu > pre1->zhishu)
{
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->xishu;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->zhishu;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
pre0 = pre0->next;
}
else if(pre0->zhishu < pre1->zhishu)//比如input中的第一行第一组 8 2,第二行中的4 4,因为4 > 2,所以head2就将4 4这组数弄了进去
{
p2 = (data *)malloc(sizeof(data));
p2->dat = pre1->xishu;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
p2 = (data *)malloc(sizeof(data));
p2->dat = pre1->zhishu;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
pre1 = pre1->next;
}
else if(pre0->zhishu == pre1->zhishu)//如果第一行数和第二行数的对应组的指数相等,就比如一组数为3 2,另一组为4 2,那么就相加,即 输出7 2这一组数,应该是这个意思吧
{
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->xishu + pre1->xishu;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->zhishu;//或者 p2->dat = pre1->zhishu;因为此时pre0->zhishu等于pre1->zhishu
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
pre0 = pre0->next,pre1 = pre1->next;
}
}
void print(data *head3)
{
data *p = head3->next;
while(p)
{
printf("%d %d ",p->xishu,p->zhishu);
p = p->next;
}
printf("\n");
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct list{
//int coe,exp,dat;//定义系数、指数、dat(这个后面要用到,随便起了个名字)
int coe;//, exp,dat;//定义系数、指数、dat(这个后面要用到,随便起了个名字)
int exp;
struct list *next;
}data;
void Greatlist(data *head);//尾插发创造链表
void sor_t(data *head0,data *head1,data *head2);
void destroy_link(data *phead);
void print(data *head2);//输出head2
int main(void)
{
data *head0,*head1,*head2;
head0 = (data *)malloc(sizeof(data));
head1 = (data *)malloc(sizeof(data));
head2 = (data *)malloc(sizeof(data));
head0->next = NULL,head1->next = NULL,head2->next = NULL;
while (1) {
Greatlist(head0);
Greatlist(head1);
sor_t(head0,head1,head2);
print(head2);
destroy_link(head2);
}
return 0;
}
void destroy_link(data *phead)
{
data *p = phead->next, *q;
while (p) {
q = p->next;
free(p);
p = q;
}
}
void Greatlist(data *head)
{
int n;
scanf("%d",&n);
data *p,*pre = head;
while(n--)
{
p = (data *)malloc(sizeof(data));
scanf("%d%d", &p->coe,&p->exp);
pre->next = p;
pre = p;
}
pre->next = NULL;
}
void sor_t(data *head0,data *head1,data *head2)
{
#if 1
data *p0, *p1, *p2, *ptmp;
p0 = head0->next;
p1 = head1->next;
p2 = head2;
while (p0 && p1) {
if (p0->exp > p1->exp) {
ptmp = p0;
p0 = p0->next;
p2->next = ptmp;
p2 = ptmp;
} else if (p0->exp < p1->exp) {
ptmp = p1;
p1 = p1->next;
p2->next = ptmp;
p2 = ptmp;
} else {
p0->coe = p0->coe + p1->coe;
if (p0->coe == 0) {
ptmp = p0;
p0 = p0->next;
free(ptmp);
ptmp = p1;
p1 = p1->next;
free(ptmp);
continue;
}
ptmp = p0;
p0 = p0->next;
p2->next = ptmp;
p2 = ptmp;
//free current p1
ptmp = p1;
p1 = p1->next;
free(ptmp);
}
}
while (p0) {
p2->next = p0;
p2 = p0;
p0 = p0->next;
}
while (p1) {
p2->next = p1;
p2 = p1;
p1 = p1->next;
}
p2->next = NULL;
#else
data *p2,*pre0 = head0,*pre1 = head1,*pre2 = head2;
pre0 = head0->next,pre1 = head1->next;
if(pre0->exp > pre1->exp)
{
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->coe;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->exp;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
pre0 = pre0->next;
}
else if(pre0->exp < pre1->exp)//比如input中的第一行第一组 8 2,第二行中的4 4,因为4 > 2,所以head2就将4 4这组数弄了进去
{
p2 = (data *)malloc(sizeof(data));
p2->dat = pre1->coe;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
p2 = (data *)malloc(sizeof(data));
p2->dat = pre1->exp;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
pre1 = pre1->next;
}
else if(pre0->exp == pre1->exp)//如果第一行数和第二行数的对应组的指数相等,就比如一组数为3 2,另一组为4 2,那么就相加,即 输出7 2这一组数,应该是这个意思吧
{
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->coe + pre1->coe;
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
p2 = (data *)malloc(sizeof(data));
p2->dat = pre0->exp;//或者 p2->dat = pre1->exp;因为此时pre0->exp等于pre1->exp
pre2->next = p2;
pre2 = p2;
pre2->next = NULL;
pre0 = pre0->next,pre1 = pre1->next;
}
#endif
}
void print(data *head3)
{
data *p = head3->next;
while(p)
{
printf("%d %d ",p->coe,p->exp);
p = p->next;
}
printf("\n");
}