链表
引入库 定义变量
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
#define MAXSIZE 100
typedef int ElemType;
定义结点
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
1、结构体包括数据域和指针域,指针域的指针类型也是LNode类型的,因为指针指向的是下一个结点。
2、LNode表示的是这个结点,LinkList表示的是指向这个结构体的指针类型。
初始化
Status InitList(LinkList *L){
//为头节点分配内存,并将分配的内存地址赋值给*L,修改传入的头结点指针本身
*L = (LNode *)malloc(sizeof(LNode));
if (*L == NULL) return ERROR;
(*L)->next = NULL; //初始化空表
return OK;
}
1、使用malloc进行动态分配内存,大小为LNode结点的大小,返回的是结构体的指针类型(LNode)
2、在初始化的时候传递的是LinkList *L,即传递的是结构体指针的指针(指向 LinkList
的指针),是为了在函数内部能够修改调用者提供的指针变量(即原始的指针变量),从而初始化链表并返回链表的头节点地址给调用者。是为了完成初始化,初始化就需要对其本身进行操作,要改变结构体指针的指向,所以传递的是结构体的指针的指针。 因为修改的是结构体的指针的指向,所以传递的是结构体的指针的指针。
3、初