链表的基本概念
链表引出
- 数组有缺陷
- 静态空间,一旦分配就不可以动态扩展,要不分配不够,要不分配过多。
- 对于数组头部进行插入和删除效率低
链表的组成
- 链表是有节点组成的
- 节点由 数据域和指针域组成
- struct LinkNode{int num; struct}
链表的分类
- 方式1: 静态链表 动态链表
- 方式2: 单向链表 双向链表 单向循环链表 双向循环链表
静态链表和动态链表
代码示例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct LinkNode
{
int num;
struct LinkNode*next;
};
void test01()
{
struct LinkNode node1 = {
10,NULL};
struct LinkNode node2 = {
20,NULL };
struct LinkNode node3 = {
30,NULL };
struct LinkNode node4 = {
40,NULL };
struct LinkNode node5 = {
50,NULL };
node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = &node5;
struct LinkNode*pCurrent = &node1;
while (pCurrent != NULL)
{
printf("%d\n",pCurrent->num);
pCurrent = pCurrent->next;
}
}
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->num = 10;
node2->num = 20;
node3->num = 30;
node4->num = 40;
node5->num = 50;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
node5->next = NULL;
struct LinkNode*pCurrent = node1;
while (pCurrent != NULL)
{
printf(":::%d\n",pCurrent->num);
pCurrent = pCurrent->next;
}
free(node1);
free(node2);
free(node3);
free(node4);
free(node5);
}
int main()
{
test01();
test02();
return EXIT_SUCCESS;
}