//(尾插法)创建单链表 void CreateListR(Lnode *L,ElemType a[],int n){ Linklist s, r; L=(Lnode*)malloc(sizeof(Lnode)); r=L; int i=0; for(i=0;i<n;i++){ s=(Lnode*)malloc(sizeof(Lnode)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } //判断链表是否为空 bool ListEmpty(Lnode *L){ return (L->next==NULL); }
时间: 2024-04-14 22:28:43 浏览: 7
这段代码中有两个函数,分别是 `CreateListR` 和 `ListEmpty`。
1. `void CreateListR(Lnode *L, ElemType a[], int n)`: 这个函数使用尾插法创建单链表。它接受一个指向链表头结点的指针 L,一个元素数组 a,以及元素个数 n。在函数内部,它首先分配一个新的头结点的内存空间,并将其地址赋给 L。然后,将指针 r 指向头结点,表示当前链表的尾部。接下来,使用循环将数组中的元素依次插入到链表的尾部。具体操作是:分配一个新节点 s,并将数组中的元素赋值给 s->data;然后,将新节点 s 插入到链表的尾部,即 r->next = s,然后将 r 移动到新节点 s,即 r = s。最后,循环结束后,将链表的尾部指针 r 的指针域 r->next 设置为 NULL,表示链表结束。
2. `bool ListEmpty(Lnode *L)`: 这个函数用于判断链表是否为空。它接受一个指向链表头结点的指针 L。在函数内部,它通过判断头结点的指针域 L->next 是否为 NULL 来确定链表是否为空。如果 L->next 为 NULL,表示链表为空,返回 true;否则,返回 false。
需要注意的是,这两个函数的实现与之前提供的代码相同,只是函数名和参数稍有不同。在这里的代码中,链表的头结点指针 L 是通过值传递的方式传入的,而不是通过指针的引用传递。因此,在函数内部改变 L 的值并不会影响到函数外部的实际参数。如果想要通过函数改变 L 的值,可以将函数的参数改为指向指针的指针,即 `Lnode **L`。
相关问题
#include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef enum{false=0,true=1}bool; typedef struct node{ ElemType data; struct node *next; }Lnode,*Linklist; //初始化单链表 bool InitList(Lnode*&L); //(头插法)创建单链表 void CreateListListF(Lnode *&L,ElemType a[],int n); //初始化单链表 bool InitList(Lnode *L){ L=(Lnode*)malloc(sizeof(Lnode)); L->next=NULL; if(L==NULL)//内存不足,头结点无法分配到空间 return false; return true; } //(头插法)创建单链表 void CreateListF(Lnode *&L,ElemType a[],int n){ Linklist s; L=(Lnode*)malloc(sizeof(Lnode)); L->next=NULL; int j=0; for(j=0;j<n;j++){ s=(Lnode *)malloc(sizeof(Lnode)); s->data=a[j]; s->next=L->next; L->next=s; } }
这段代码是用C语言实现的单链表的初始化和创建,其中包括了头插法创建单链表的函数。代码中定义了一个结构体node,它包含了一个数据域data和一个指向下一个结点的指针next。代码中还定义了一个typedef枚举类型bool,用来表示true和false。函数InitList用来初始化单链表,函数CreateListF用来通过头插法创建单链表。函数的具体实现如下:
```c
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef enum{false=0,true=1}bool;
typedef struct node{
ElemType data;
struct node *next;
}Lnode,*Linklist;
// 初始化单链表
bool InitList(Lnode*& L){
L=(Lnode*)malloc(sizeof(Lnode));
L->next=NULL;
if(L==NULL) // 内存不足,头结点无法分配到空间
return false;
return true;
}
// 头插法创建单链表
void CreateListF(Lnode*& L, ElemType a[], int n){
Linklist s;
L=(Lnode*)malloc(sizeof(Lnode));
L->next=NULL;
int j=0;
for(j=0;j<n;j++){
s=(Lnode *)malloc(sizeof(Lnode));
s->data=a[j];
s->next=L->next;
L->next=s;
}
}
```
你有什么其他问题吗?
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef enum{false=0,true=1}bool; typedef struct Lnode{ ElemType data; struct Lnode *next; int length; }Lnode,*Linklist; //初始化单链表 bool InitList(Lnode *L); //(头插法)创建单链表 void CreateListListF(
(Linklist L, int n) {
Linklist p;
int i;
L = (Lnode *)malloc(sizeof(Lnode));
L->next = NULL;
printf("请输入链表的元素:\n");
for (i = 0; i < n; i++) {
p = (Lnode *)malloc(sizeof(Lnode));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
L->length = n;
return true;
}