- 链表引出
- 数组有缺陷
- 静态空间,一旦分配内存就不可以动态扩展,要不分配不够,要不分配过多
- 对于数组头部进行插入和删除效率低
- 链表的组成
- 链表是由节点组成的
- 节点由 数据域 和 指针域组成
- struct LinkNode { int num ; struct LinkNode * next; }
- 链表的分类
- 方式1 静态链表 动态链表
- 方式2 单向链表 双向链表 单向循环链表 双向循环链表
- 静态链表和动态链表
- 静态链表 创建在栈上
- 动态链表 创建在堆区
//节点的声明
struct linkNode
{
char link; //数据域
struct linkNode *next; //指针域
};
//1、静态链表
void test01()
{
//创建节点
struct linkNode node1 = { 'a',NULL };
struct linkNode node2 = { 'b',NULL };
struct linkNode node3 = { 'c',NULL };
struct linkNode node4 = { 'd',NULL };
struct linkNode node5 = { 'e',NULL };
//建立关系
node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = &node5;
//如何遍历这个链表
//创建一个指针 指向第一个节点
struct linkNode *pCurrent = &node1;
while (pCurrent!=NULL)
{
printf("%c ", pCurrent->link);
pCurrent = pCurrent->next;
}
}
//2、动态链表
void test02()
{
struct linkNode *node1 = malloc(sizeof(struct linkNode));
struct linkNode *node2 = malloc(sizeof(struct linkNode));
struct linkNode *node3 = malloc(sizeof(struct linkNode));
struct linkNode *node4 = malloc(sizeof(struct linkNode));
struct linkNode *node5 = malloc(sizeof(struct linkNode));
node1->link = 'q';
node2->link = 'w';
node3->link = 'r';
node4->link = 't';
node5->link = 'y';
//建立关系
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
node5->next = NULL;
struct linkNode *pCurrent = node1;
//遍历链表
while (pCurrent != NULL)
{
printf("%c ", pCurrent->link);
pCurrent = pCurrent->next;
}
//释放节点
free(node1);
node1 = NULL;
free(node2);
node2 = NULL;
free(node3);
node3 = NULL;
free(node4);
node4 = NULL;
free(node5);
node5 = NULL;
}