Status InitList(LinkList *L) { /* 构造一个空的线性链表 */ Link p; p = (Link)malloc(sizeof(LNode)); /* 生成头结点 */ if (p) { p->next = NULL; (*L).head = (*L).tail = p; (*L).len = 0; return OK; } else return ERROR;//内存分配不够 } Status MakeNode(Link *p, ElemType e) { /* 分配由p指向的值为e的结点,并返回OK;若分配失败。则返回ERROR */ *p = (Link)malloc(sizeof(LNode)); if (!*p) return ERROR; (*p)->data = e; return OK; }
时间: 2024-04-20 17:25:52 浏览: 16
这段代码是用于初始化一个空的线性链表,并且实现了创建一个节点的函数。
函数`InitList`接受一个指向指针的指针`L`作为参数,用于修改指针`L`所指向的值。它首先使用`malloc`函数为头结点`p`分配内存空间,如果内存分配成功,则将头结点的`next`指针指向NULL,将头结点赋值给链表的`head`和`tail`指针,并将链表的长度初始化为0。最后,返回一个代表成功的状态值OK。如果内存分配失败,则返回一个代表错误的状态值ERROR。
函数`MakeNode`接受一个指向指针的指针`p`和要存储的元素`e`作为参数,用于修改指针`p`所指向的值。它使用`malloc`函数为新节点分配内存空间,如果内存分配成功,则将新节点的数据域赋值为`e`,并返回一个代表成功的状态值OK。如果内存分配失败,则返回一个代表错误的状态值ERROR。
需要注意的是,这段代码中没有对内存分配是否成功进行判断。在实际应用中,应该增加对内存分配的判断,确保内存分配成功后再进行后续操作。另外,可以看出这段代码是基于线性链表的实现,其中头结点既作为链表的起始节点,也作为链表的尾节点,通过`head`和`tail`指针来标记链表的头部和尾部。
相关问题
c++里面的void Initlist(linklist *&L)的*&在c语言里面应该怎么用
在C语言中,可以使用指针来模拟C++中的引用参数。因此,你可以将 `void Initlist(linklist *&L)` 转换为 `void Initlist(linklist **L)`,并在函数内部使用二级指针来操作链表。例如:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
void Initlist(ListNode **L) {
*L = NULL; // 初始化链表为空
}
void Insert(ListNode **L, int val) {
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = *L;
*L = newNode;
}
int main() {
ListNode *L;
Initlist(&L);
Insert(&L, 1);
Insert(&L, 2);
Insert(&L, 3);
// ...
return 0;
}
```
在上面的代码中,`Initlist` 函数使用二级指针 `ListNode **L` 作为参数,通过修改指针的指向来初始化链表。在 `main` 函数中,我们使用 `&L` 来传递链表指针的地址给 `Initlist` 函数。这样,当我们在 `Initlist` 函数中修改 `*L` 的值时,实际上是在修改 `main` 函数中的 `L` 指针所指向的地址的值。
请将LinkList &L改成LinkList *L而不出bug:#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> typedef struct LNode { int data;//数据域 struct LNode *next;//指针域 }LNode,LinkList; bool InitList(LinkList &L)//初始化单链表 { L = (LNode)malloc(sizeof(LNode));//分配一个头节点 if (L == NULL) return false;//内存不足,分配失败 L->next = NULL;//头节点之后还没有节点 return true; }
将代码中的"LinkList &L"改为"LinkList *L"即可,修改后的代码如下:
```
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode {
int data;//数据域
struct LNode* next;//指针域
}LNode, * LinkList;
bool InitList(LinkList* L)//初始化单链表
{
*L = (LNode*)malloc(sizeof(LNode));//分配一个头节点
if (*L == NULL)
return false;//内存不足,分配失败
(*L)->next = NULL;//头节点之后还没有节点
return true;
}
```