C语言描述数据结构——链表

链表的基本概念

链表引出

  • 数组有缺陷
  • 静态空间,一旦分配就不可以动态扩展,要不分配不够,要不分配过多。
  • 对于数组头部进行插入和删除效率低

链表的组成

  • 链表是有节点组成的
  • 节点由 数据域和指针域组成
  • struct LinkNode{int num; struct}

链表的分类

  • 方式1: 静态链表 动态链表
  • 方式2: 单向链表 双向链表 单向循环链表 双向循环链表

静态链表和动态链表

  • 静态链表 创建在栈上
  • 动态链表 创建在堆区

代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
//节点声明
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;
        }
}
//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->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;
}

你可能感兴趣的:(C/C++数据结构,数据结构,链表,C语言描述,C语言进阶)