本人小白自学数据结构,还请大佬指正!!
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
typedef struct list
{
float xishu;
int zhishu;
struct list* next;
}DLIST;
DLIST*creat(int n)
{
int i;
DLIST* head,* end,* node;
head = (DLIST*)malloc(sizeof(DLIST));
end = head;
for (i = 0; i < n; i++)
{
node = (DLIST*)malloc(sizeof(DLIST));
scanf_s("%d", &node->zhishu);
scanf_s("%f", &node->xishu);
end->next = node;
end = node;
}
end->next = NULL;
return head;
}
DLIST* add(DLIST* A, DLIST* B)
{
DLIST* pa = A->next;
DLIST* pb = B->next;
DLIST* pc = A;
while(pa && pb)
{
if (pa->zhishu == pb->zhishu)
{
pc->next = pa;
pc = pa;
pc->zhishu = pa->zhishu;
pc->xishu = pa->xishu + pb->xishu;
pa = pa->next;
pb = pb->next;
if (pa == NULL||pb==NULL)break;
}
if (pb->zhishu < pa->zhishu)
{
pc->next = pb;
pc = pb;
pc->zhishu = pb->zhishu;
pc->xishu = pb->xishu;
pb = pb->next;
if (pb == NULL)break;
}
if (pa->zhishu < pb->zhishu)
{
pc->next = pa;
pc = pa;
pc->zhishu = pa->zhishu;
pc->xishu = pa->xishu;
pa = pa->next;
if (pa == NULL)break;
}
}
pc->next = pa ? pa : pb;
free(B);
return A;
}
void Plist(DLIST* A)
{
while (A)
{
A = A->next;
printf("%d_%f ", A->zhishu, A->xishu);
}
printf("\n");
}
int main()
{
DLIST* X;
DLIST* Y;
X = creat(4); Y = creat(4);
Plist(add(X, Y));
return 0;
}