Lnode *Creat_Linklist2()//尾插法建立单链表 { Lnode *L=NULL; Lnode *s,*r=L; int x;//设置元素类型为int scanf("%d",&x); while(x!=0)//0结束输入 { s=(Lnode*)malloc(sizeof(Lnode));//申请结点 s->data=x; if(L==NULL)//第一个结点处理 { L=s; } else { r->next=s;//r代表最后一个结点,把s插入该结点之后 } r=s;//让r重新指向最后一个结点 scanf("%d",&x); } if(r!=NULL) { r->next=NULL;//对于非空表,最后结点指针域置空 } printf("成功建立链表!\n"); return L; }什么意思
时间: 2024-03-14 10:48:53 浏览: 55
这段代码是用尾插法创建一个单链表。它首先定义了一个指向链表头节点的指针L,以及两个指向节点的指针s和r。然后它通过循环,输入一些整数,并分配一个新的节点s,将输入的整数存储在s的数据域中。如果这是第一个节点,它将L指向s,否则它将s插入到r之后,然后更新r指针指向s,以便下一次输入。当输入的整数为0时,输入结束。最后,它将最后一个节点的指针域设置为NULL,并返回指向链表头节点的指针L。
相关问题
2-6 用头插法创建单链表 分数 20 作者 朱晓龙 单位 西安邮电大学 Creat_LinkList()函数是使用头插法建立一个带头节点的单链表。函数须返回单链表的头指针,空链表须返回NULL。 函数接口定义: LinkList Creat_LinkList(); LinkList是函数返回的头指针类型。 裁判测试程序样例: #define FLAG -1 #include <stdio.h> #include <malloc.h> typedef int datatype; typedef struct node { datatype data; struct node *next; }LNode, *LinkList; LinkList Creat_LinkList(); void Print_LinkList(LinkList L);/*这里忽略函数实现部分 */ int main() { LinkList L; L = Creat_LinkList(); if(L == NULL) { printf("L=NULL,error!"); return 0; } Print_LinkList( L ); return 0; } /* 请在这里填写答案 */ 输入样例: 在这里给出一组输入。例如: 1 2 3 4 5 -1 输出样例: 在这里给出相应的输出。例如: 5 4 3 2 1
```
LinkList Creat_LinkList() {
LinkList L = (LinkList)malloc(sizeof(LNode)); // 创建头节点
L->next = NULL; // 头节点的指针域置为 NULL
datatype data;
scanf("%d", &data);
while (data != FLAG) { // FLAG 为结束标志
LNode* p = (LNode*)malloc(sizeof(LNode)); // 创建新节点
p->data = data; // 将数据存入新节点
p->next = L->next; // 将新节点插入到头节点之后
L->next = p;
scanf("%d", &data);
}
return L;
}
```
解析这段代码 #include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data1; int data2; struct LNode *next; }LNode,*Linklist; int Compare(int a,int b); //比较一元多项式的系数函数 void Attach(int a1,int a2,Linklist *Prear); //链表连接函数 void Print (Linklist L); Linklist Creat() //建表 { Linklist L,r; L=(Linklist)malloc(sizeof(Linklist)); L->next=NULL; r=L; int i,j; printf("请输入系数和指数,以空格隔开,以00结束!\n"); scanf("%d %d",&i,&j); while(i!=0&&j!=0) { Linklist p; p=(Linklist)malloc(sizeof(Linklist)); p->data1=i; p->data2=j; r->next=p; r=p; scanf("%d %d",&i,&j); } r->next=NULL; return L; } Linklist Add(Linklist P,Linklist Q) { LNode *rear,*L; rear=(Linklist)malloc(sizeof(Linklist)); L=rear; int sum; P=P->next; Q=Q->next; while(P&&Q) { switch(Compare(P->data2,Q->data2)) { case 1: Attach(Q->data1,Q->data2,&rear); Q=Q->next; break; case -1: Attach(P->data1,P->data2,&rear); P=P->next; break; case 0: sum = P->data1 + Q->data1; if(sum) Attach(sum,P->data2,&rear); P=P->next; Q=Q->next; break; } } for(P;P!=NULL;P=P->next) //没有比较完的P或Q Attach(P->data1,P->data2,&rear); for(Q;Q!=NULL;Q=Q->next) Attach(Q->data1,Q->data2,&rear); rear->next=NULL; return L; } void Print(Linklist L) { if(!L) printf("xxxx"); Linklist p; p=L->next; printf("相加结果为:\n"); while(p!=NULL) { printf("+%d*x^%d",p->data1,p->data2); p=p->next; } } void Attach(int a1,int a2,Linklist *c) { Linklist p; p=(Linklist)malloc(sizeof(Linklist)); p->data1=a1; p->data2=a2; p->next=NULL; (*c)->next=p; *c=p; } int Compare(int a,int b) { if(a>b) return 1; else if(a<b) return -1; else return 0; } int main() { Linklist P,Q,R; P=Creat(); Q=Creat(); R=Add(P,Q); Print(R); return 0; }
这段代码是一个 C 语言实现的一元多项式相加程序。具体实现过程如下:
1. 定义一个结构体 LNode,其中包含两个数据域 data1 和 data2,分别表示多项式的系数和指数。同时,结构体中还有一个指向下一个结点的指针 next,用来实现链表结构。
2. 定义一个别名 Linklist,表示指向 LNode 结构体的指针类型。
3. 定义一个 Compare 函数,用来比较两个一元多项式的系数大小,其返回值为 1、-1、0,分别表示第一个多项式系数大于、小于、等于第二个多项式系数。
4. 定义一个 Attach 函数,用来将一个新结点插入到链表中。
5. 定义一个 Print 函数,用来输出链表中的所有结点。
6. 定义一个 Creat 函数,用来创建一个链表,其中用户可以输入多项式的系数和指数,以 00 结束输入。
7. 定义一个 Add 函数,用来将两个一元多项式相加,并返回结果链表。
8. 在 main 函数中,分别调用 Creat 函数创建两个链表 P 和 Q,然后调用 Add 函数将它们相加,最后调用 Print 函数输出结果。
值得注意的是,该程序中采用了链表结构来存储一元多项式,这种结构有利于处理数据的动态性和空间的灵活性。同时,程序中还有一些 C 语言中常用的语句和函数,例如结构体的定义、动态内存分配、链表的遍历等。
阅读全文