网络异常,图片无法展示
|
单链表
- 优点;不要求大片连续空间,改变容量方便
- 缺点:不可随机存取,要耗费一定空间存放指针
定义一个单链表
struct LNode { //定义单链表节点类型 ElemType data; //每个节点存放一个数据元素 struct LNode *next; //指针指向下一个节点 }LNode, *LinkList
增加一个新的节点:在内存中申请一个节点所需的空间,并用指针p指向这个节点
struct LNode *p=(struct LNode *) malloc(sizeof(struct LNode));
声明一个头指针L,指向单链表的第一个节点
typedef struct LNode *LinkList LNode * L; or LinkList L; //声明一个指向单链表第一个节点的指针
typedef关键字
在定义数据类型的时候经常会涉及到很多代码,typedef关键字可以将数据类型重命名
语法为:typedef <数据类型> <别名>
代码改进后:
typedef struct LNode LNode; LNode *p=(LNode *) malloc(sizeof(LNode));
初始化链表
不带头节点的单链表
bool InitList(LinkList &L){ L = Null; //空表,暂时没有任何节点,此目的是为了防止脏数据 return true; }
判断单链表是否为空
bool Empty(LinkList L){ return (L==Null); }
带头节点的单链表
bool InitList(LinkList &L){ L = (LNode *) malloc(sizeof(LNode)); //分配一个节点 if (L==Null) //内存不足分配失败 return false; L->next = Null; //头节点之后暂时还没有节点 return true; }
相比之下带头的节点写代码更方便,不带头的节点对于第一个数据节点和后续的数据节点的处理需要不同的代码逻辑。而且空表和非空表也需要不同的逻辑