能写出注释吗,最好能在VS2019直接运行的
编程完善程序
下列c语言编写的程序,主要完成如下功能:
1)初始化三个带头结点的单链表La,Lb,Lc;
2)连续读入一组整数(比如1 2 3 -1 -2 -3 4 -4 -5 5 0),并将非零整数
依次存储在单链表La中(注意:碰到第一个0结束输入);
3)将La分解成两个带头结点的单链表Lb和Lc,其中Lb中存放负整数,Lc中存放正整数。要求Lb和Lc利用La中的结点空间。
4)在分解后,能显示Lb中所有的负整数,Lc中所有的正整数。
请根据上述已知条件,并结合下面的代码,完成下面三个问题:
1)在void DisplayList(LinkList L)函数体中,写出代码,使之能显示单链表La中的数据元素;
2)void DivideList(LinkList La, LinkList Lb, LinkList Lc)函数体中,写出代码,使之能将La分解成满足上述要求的Lb和Lc。
3)假定在主函数中调用CreateFromTail(La)时,输入的整数系列是:1 2 3 -1 -2 -3 4 -4 -5 5 0,请给出主函数调用DivideList(La, Lb, Lc);后,调用DisplayList(Lb);和DisplayList(Lc);后的屏幕输出结果。
CreateFromTail(La)是头插法代码题目给出来了字太多打不下了
void DisplayList(LinkList L)
{//请写出代码,实现显示单链表L中所有数据元素的功能
}
void DivideList(LinkList La, LinkList Lb, LinkList Lc)
{实现将La分解成两个带头结点的单链表Lb和Lc的功能
}
//第3问的答案也写在答题纸上
代码及运行结果如下:
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct _datanode
{
int data;
struct _datanode* next;
}Node,* LinkList;
//头插法
void CreateFromTail(LinkList List)
{
int data;
LinkList t;
while (1)
{
scanf("%d", &data);
if (data == 0)
break;
t = (LinkList)malloc(sizeof(Node));
t->data = data;
//头插法
t->next = List->next;
List->next = t;
}
}
void DisplayList(LinkList L)
{//请写出代码,实现显示单链表L中所有数据元素的功能
LinkList p = 0;
if (L == 0) return;
p = L->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void DivideList(LinkList La, LinkList Lb, LinkList Lc)
{
//实现将La分解成两个带头结点的单链表Lb和Lc的功能
LinkList pa, pb, pc;
pa = La->next;
pb = Lb;
pc = Lc;
while (pa)
{
if (pa->data < 0)
{
pb->next = pa;
pb = pa;
}
else
{
pc->next = pa;
pc = pa;
}
pa = pa->next;
}
pb->next = 0;
pc->next = 0;
}
int main()
{
LinkList La, Lb, Lc;
La = (LinkList)malloc(sizeof(Node));
La->next = 0;
Lb = (LinkList)malloc(sizeof(Node));
Lb->next = 0;
Lc = (LinkList)malloc(sizeof(Node));
Lc->next = 0;
CreateFromTail(La);
DivideList(La, Lb, Lc);
DisplayList(Lb);
DisplayList(Lc);
return 0;
}
参考下
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!