当前位置:   article > 正文

学习笔记——C语言基本概念&链表——(12)

学习笔记——C语言基本概念&链表——(12)

在介绍链表之前先介绍一下数据结构的分类:

线性结构:数组,链表,栈,队列

顺序结构:数组

链式结构:链表

非线性结构:树,二叉树

1、链表

特点:利用碎片化空间。

链表组成:由节点组成

节点组成:

数据域--真正要存放的数据

指针域--下一个节点的地址

节点的定义:

第一种: 直接定义

  1. struct NODE
  2. {
  3. char name[32];
  4. int id;
  5. float score;
  6. struct NODE *addr; //下一个节点的地址
  7. };


第二种:
先定义数据域, 再定义节点

  1. //定义数据域
  2. struct Stu
  3. {
  4. char name[32];
  5. int id;
  6. float score;
  7. };
  8. //定义指针域
  9. struct NODE
  10. {
  11. struct Stu stu; //数据域
  12. struct NODE *addr;//指针域, 下一个节点的地址
  13. }

回顾一下指针的定义:

  1. 1>int *p = NULL;
  2. 2>int num = 100; int *p=#
  3. 3>char buf[32]={0}; char *p=buf;
  4. 4>char *p = “hello”;

由链表的引入又有了新的指针定义:
1》 malloc函数 -- 开辟空间

头文件:#include <stdlib.h>

  1. void *malloc(size_t size);
  2. 形参: size -- 要开辟空间的大小
  3. 返回值:
  4. 成功: 返回开辟好的空间的首地址, void * -- 万能指针, 可以随意的强转为你想要的
  5. 类型
  6. 失败: NULL
  7. int *p = (int *)malloc(sizeof(int));

2》 void free(void *ptr);
        形参: 要释放的空间的首地址;
        返回值: void -- 无返

3》 memset -- 内存清理函数
        #include <string.h>
        void *memset(void *s, int c, size_t n);
        形参: s -- 你要清理的空间的首地址
        c -- 0
        n -- 清多大, sizeof
        返回值: 就是第一个参数

2、双向链表

组成:节点--数据域和指针域(存放上一个和下一个节点的地址)

定义格式:

  1. struct Stu
  2. {
  3. char name[32];
  4. int id;
  5. float score;
  6. };
  7. struct NODE
  8. {
  9. struct Stu stu; //数据域
  10. struct NODE *front; //指针域, 上一个节点的地址
  11. struct NODE *next; //指针域, 下一个节点的地址
  12. }

图示:

循环链表:
单向循环
双向循环

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/434185
推荐阅读
相关标签
  

闽ICP备14008679号