代码参照了严蔚敏、吴伟民编写的数据结构(C语言版)。
所有代码采用C语言编写。讲解请查看注释。
- 注1:书中很多函数采用了引用传值,如InitList(LNode &L)。但C语言并不支持引用传值,因此统一改为地址传值,即InitList(LNode*L)。
- 注2:本代码创建的为不带头节点的单链表,即从第一个节点的数据域开始存储数据。
头文件及宏定义
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//线性表动态分配存储结构
#define OK 1
#define Fail 0
#define False 0
#define True 1
typedef定义数据类型和结构体
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode* next;
}LNode, *LinkList;//LinkList p等价于LNode *p
//LinkList强调的是一个单链表,LNode强调的是一个结点
InitList(创建)
Status InitList_Link(LNode* L){
//不带头节点(无head),此处的L为LNode指针类型
L=(LNode*)malloc(sizeof(LNode));//为第一个节点分配内存,malloc返回值是指针,指向分配内存的起始地址
//与顺序表不同,单链表的初始化是对每个结点单独进行内存空间的分配
L->next=NULL;
return OK;
}
DestroyList(销毁)
Status DestroyList_Link(LNode* L){
LNode* p=L;
while(p){
//从第一个节点开始销毁含第一个节点在内的其后所有节点
L=L->next;//取下一个节点
free(p);
p=L;
}
return OK;
}
ClearList(清空)
Status ClearList_Link(LNode* L){
//销毁
LNode* p=L->next;
while(p){
//从第一个节点开始销毁第一个节点后的所有节点
L->next=L->next->next;
p=NULL;
free