对于刚开始学数据结构的同学来说,在初始化单链表的算法中,语句//L = (LNode * )malloc(sizeof(LNode));//可能不太好理解(至少我是这样)。那么下面我就来详细的解释一下该语句:

#include<stdlib.h>​//构造单链表数据
typedef struct LNode{ElemType data; struct LNode *next;
}LNode;//初始化线性表
void InitList(LNode *&L){L = (LNode * )malloc(sizeof(LNode));L -> next = NULL;
}

↑↑↑上面就是初始化单链表的基本语句。

malloc()函数的作用是在内存中开辟一个空间。那么要开辟多大的空间呢,用操作符"sizeof"计算。是的,sizeof不是一个函数,是一个操作符,和" + "," - "," * "," / "一样是操作符。计算出开辟的空间有"LNode"这个结构体那么大,LNode这个结构体包含了数据域和指针域,数据域用来存放数据元素,指针域用来存放下一个数据结点的地址。作为头结点,其数据域一般不做赋值。

因为头部文件调用了"#include<stdlib.h>",所以malloc()函数的返回值类型是(void * )型,所以要用(LNode * )强制转换为指针类型,然后赋值给指针变量L。如果没有头部文件"#include<stdlib.h>",malloc()函数默认返回 int 型,此时就不能强制转换为指针类型了。

然后通过指针L在内存中找到该结点,并将该结点的next域设为空,这样一个带头结点的空链表就形成了。

假设头结点在内存中的地址为001x

" L = (LNode * )malloc(sizeof(LNode)) "语句如下解读:

[1] sizeof(LNode):首先操作符sizeof计算结构体LNode所占的空间

[2] malloc(sizeof(LNode)):用操作符sizeof计算完空间,再用malloc()函数,在内存中开辟结构体"LNode"那么大的空间,001x(假设)为该空间的地址。

[3] (LNode * )malloc(sizeof(LNode)):头部文件调用"#include<stdlib.h>",malloc()函数返回类型为(void * ),由于 L 是指针变量,直接赋值肯定报错,所以要将malloc()函数的返回值,用(LNode * )强制装换为指针类型

[4] L = (LNode * )malloc(sizeof(LNode)):将头结点的地址赋值给指针L,所以现在可以通过指针L访问该节点了。

这里值得注意的是,在C语言中,用malloc()函数开辟出来的空间,是在堆内存里保存的,简单来说就是,只要程序在运行,只要不用语句释放这块空间,比如free()函数,这块空间就会一直存在,除非关闭这个程序,这块空间才会被系统回收。这个细节在销毁单链表语句中会用到。

C语言数据结构理解语句L = (LNode * )malloc(sizeof(LNode));相关推荐

  1. 数据结构中的L=(List)malloc(sizeof(PtrToNode));是什么意思

    sizeof函数(sizeof函数百度百科) 用于计算数据(包括数组.变量.类型.结构体等)所占用的内存空间,用字节数表示.在L=(List)malloc(sizeof(PtrToNode));中,s ...

  2. 肝下十万字的《数据结构考研》笔记,你对数据结构理解水平将从入门到入魔❤️

    第一章 绪论 1.1基本概念 1.1.1基本术语   相关术语:数据.数据元素.数据对象.数据类型和数据结构.   数据(data)是对客观事物的符号表示,它能被计算机识别.存储和加工处理,它是计算机 ...

  3. C语言数据结构 单链表的建立、遍历、查找、插入和删除操作

    参考文献 本博文为半摘记性质 -- 声明:全文主干部分摘自 [1] 杨智明. 数据结构(C语言版)[M]. 第一版. 北京:北京理工大学出版社, 2016. [2] 严蔚敏, 李冬梅, 吴伟民. 数据 ...

  4. C语言-数据结构-单链表的初始化,插入和输出

    [问题描述] 设有头结点单链表,实现单链表的初始化.插入和输出算法. [输入形式] 第一行输入一个N(N大于等于1,小于1000),一个M(N大于等于1,小于1000): 第二行输入N个整数,以空格作 ...

  5. c语言数据结构linklist用法,C语言数据结构-线性链表LinkList

    1. 头结点表示链表中第一个结点的存储位置 2. 最后一个结点的存储位置为空(NULL); #ifndef __LINKLLIST_H__ #define __LINKLLIST_H__ #defin ...

  6. c语言数据结构单链表

    #include<stdio.h> #include<stdlib.h> typedef int elemtype; typedef struct LNode {     el ...

  7. c语言图书馆管理系统中数据存放位置,c语言数据结构图书馆系统

    //#define var 333; //移动光标位置 void gotoxy(int x,int y) { COORD xy; HANDLE hstdout; hstdout=GetStdHandl ...

  8. C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表

    [C语言描述]<数据结构和算法> 说是这个教程是按照<大话数据结构>这本书来编写的:数据结构与算法经典书籍--大话数据结构(带配套源码) ↑废话太TM多了,换一个! [搞定数据 ...

  9. C语言数据结构-第二章线性表-电大

    第二章线性表--内容简介 本章将进入线性结构的学习. 线性结构是最简单.最常用的一种数据结构. 本章将学习线性表的定义.顺序和链式两种存储方式及相应存储结构上的运算实现.通过典型示例训练,掌握线性表的 ...

  10. 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc

    数据结构C语言字符串的基本操作 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int leng ...

最新文章

  1. 数据治理(一):为什么要数据治理
  2. .NET 4.0 Interop新特性ICustomQueryInterface (转载)
  3. 二条件if else语句可以用离散二分布概率函数实现
  4. docker commit 发布自己的镜像
  5. python数据科学-多变量数据分析
  6. 《Python程序设计》——1.2 程序开发周期
  7. python与excel-Python 与 Excel 不得不说的事
  8. 在Linux的Terminal中显示文本文件特定行的内容
  9. Windows每月更新补丁离线安装包下载
  10. 坚持练字一年是什么样的体验?
  11. 国产管理软件勒索病毒大爆发
  12. JAVA高级应用课程设计(网上书城系统——会员登陆模块的设计与实现)
  13. 微信罕见出手,再造一个万能的电商平台!
  14. 贪吃蛇之一维数组实现
  15. 基于服务器端的三维渲染技术
  16. 【P4论文分享】基于P4的可编程数据平面研究及其应用
  17. CST微波工作室学习笔记2 主要特点
  18. itext html转换为pdf排版错乱,使用iText库将html转换为pdf时不适用hr的Inline CSS
  19. 计算机上m键mm代表什么意思,M与MM分别代表什么?What does M and MM stand for?
  20. 前端实现右键自定义菜单

热门文章

  1. VBA笔记 退出循环、Sub、Fuction等的Exit语句
  2. vscode自动快捷格式化代码_vscode格式化代码快捷键_解锁格式化的快捷键
  3. html制作动物百科网站,Steam疯狂周三游戏推荐:动物百科全书
  4. 种草推荐redis客户端
  5. 案例研究:手机APP的UI设计流程
  6. selenium+java+chrome环境搭建
  7. 学习Python的pyecharts的过程中踩到的一些坑
  8. Mesh平滑处理的几种算法比较
  9. 三维匹配_为什么你的倾斜摄影三维建模模型效果差,都进来看看
  10. 【实习之T100开发】T100 单档程序开发,java工程师面试突击中华石杉