首页 > 代码库 > c简单的单向链表

c简单的单向链表

ps:list链表  node节点

在链表中节点就是一个个的结构体

堆空间由于在申请内存时,地址是随机的,所以要用链表的方式将其连接起来,但是链表头的地址要知道.

每个节点包含两个部分:数据区和地址区,其中指向自身类型节点的指针叫做地址域,定义结构体时别忘了随便给head附上NULL地址.(尾地址不用单独定义,因为它是在节点内的)

由于最后一个节点之后没有指向的下一个节点,所以其地址域为NULL,如果是空链表,就是只定义了一个结构体,什么数据都没有,这个时候把表头的地址初始化定为NULL

技术分享

节点的插入有头插法和尾插法:

头插法就是不断地在头部位置添加节点,如上图也就是新添加的节点的地址域要指向原来的头地址,新的头地址要改为新插入的节点的地址.这样刚好在添加第一个节点的时候,初始化的头地址变为了第一个节点的地址域也就是NULL,也就是尾指针变为了NULL.调用链表中的数据时,要定义一个节点类型的指针,它指向要和头地址的指向相同,然后利用它调用第一个节点,在将此节点的地址域赋给它,再次利用它调用下一个节点...只到它为NULL指针为止.

技术分享

#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data;
struct Node* pNext;
};
struct Node* pHead = NULL;
void AddHead(int data)
{
struct Node* p = (struct Node*)malloc(sizeof(struct Node));
p->data = http://www.mamicode.com/data;
p->pNext = pHead;
pHead = p;
}
void Print()
{
struct Node* ptemp = pHead;
while (ptemp != NULL)
{
printf("%d ", ptemp->data);
ptemp = ptemp->pNext;
}
}
void main()
{
AddHead(1);
AddHead(2);
AddHead(3);
Print();
}

尾插法:尾插法相对来说比较麻烦,多了一个判断是不是第一个节点的过程

技术分享

技术分享

#include<stdio.h>
#include<stdlib.h>
struct Node
{
	int data;
	struct Node* pNext;
};
struct Node* pHead = NULL;
void AddHead(int data)
{
	struct Node* p = (struct Node*)malloc(sizeof(struct Node));
	p->data = http://www.mamicode.com/data;"%d ", ptemp->data);
		ptemp = ptemp->pNext;
	}
}
void main()
{
	AddTail(1);
	AddTail(2);
	Print();
}

  

 

 

c简单的单向链表