我们继续看点头节点单链表的操作,前面我们已经说到单链表框架的建立,现在我们来看一下单链表具体功能的实现。
首先我们要知道对链表的操作实质上是对节点和节点成员的操作,无论是什么类型的链表都离不开这些操作。无非就是操作起来的复杂度问题。
单链表链表框架的搭建
创建头节点
在单链表里面,我们每一个节点都会包括2部分,数据域和指针域也叫做地址域,其实存放的是下一个节点的地址,所以节点才能像链一样连接起来。
typedef struct Listnode
{
int data;
struct Listnode* next;
}Listnode;//创建一个节点
接下来我们就要看整个链表的框架了,首先我们需要一个指向链表头的指针和一个指向链表尾部的指针,还需要知道这个链表的实际大小。但是问题很多,指向这个链表的指针类型是什么呢?一定是你定义的Listnode* 类型,因为这个指针是指向节点的,这个节点的类型是Listnode类型,还有链表的长度。看代码
typedef struct SLIST
{
Listnode* first;
Listnode* last;
size_t size;//size_t是无符号整型,因为长度不可能为负数
}SLIST;
我们用链表是对其数据域进行想要的操作,首先就是存储数据,但是一个头节点定义出来后只有夜歌数据域,我们想对多个数据进行操作时就需要使用多个节点,因此就需要申请节点,在这个节点里面放你想要的数据。
Listnode* _Buynode(int x)
{
Listnode* S = (Listnode*)malloc(sizeof(Listnode));
if (S == NULL)
return false;
S->data = x;
S->next = NULL;
return S;
}
我们先来看一下链表的输入函数
void ListInit(SLIST* psl)
{
Listnode* S = _Buynode(0