说明:
由于原先的顺序表拓展空间不方便,以及插入和删除元素需要挪动太多,因此引出单链表;
单链表里面包含存放数据的项,和一个记录指向下一个节点的指针。因此插入和删除,以及拓展空间在后续就会很方便。
而由于单链表是一个节点一个节点穿起来的,因此从开头有无头结点,又划分两种。带头结点,头结点data为空,指针域指向NULL。不带头节点直接l==NULL
代码如下:
#include <stdio.h>
#include <malloc.h>
/*
带头结点是为了计算更方便,l头指针没有直接指向需要存储的结点。而不带头结点则直接指向需要实际存储的结点。
*/
typedef struct lnode
{
int data;
lnode *next;
}lnode,*linklist;
/*
bool inilist(linklist &l) //没有头结点,直接l头指针,指向NULL
{
l=NULL;
return true;
}
*/
bool inilist(linklist &l)//含头结点,l头指针,指向头结点的数据空间,l的next指针,指向空
{
if(l==NULL)
return false;
l=(lnode*)malloc(sizeof(lnode));//lnode表示一个结点而linklist表示整个单链表。 lnode* 相当于 linklist
l->next=NULL; //头指针指向了头结点,因此这里的l->next相当于头结点中的next指针域。
return true;
}
bool empty(linklist &l)//判断头结点的单链表是否为空
{
if(l->next==NULL)
return true;
else
return false;
}
int main()
{
linklist l;//指向单链表的一个指针l,即头指针为l也可写成lnode* l,但是一般lnode表示结点,linklist才表示整个链表
inilist(l);//初始化
return 0;
}