1.先区分一下概念:
头结点:
在单链表第一个元素结点之前设置的一个结点, 数据域可以不存任何信息,指针域指向单链表第一个元素的结点。对于单链表来说, 头结点可有可无,但为了操作方便,一般情况下单链表都具有头结点,后面的分析将会区别一下有头结点和没有头结点的区别。
优点:
减少了单链表添加删除时特殊情况的判断,减少了程序的复杂性,主要是添加和删除在第一个有元素的结点(首元结点)上有区别,如果链表没有头结点,则删除或添加时都得需要判断一次首元结点,有了头结点以后,首元结点实际为链表的第二个结点,使得所有的元素结点的添加删除更具有统一性,举例如下:

以删除结点举例:

typedef struct stu
{int num;struct stu *next;
}TYPE;

没有头结点的情况

TYPE * delete(TYPE * head,int num)
{TYPE *pf,*pb;if(head==NULL){ printf("\nempty list!\n");return NULL;}pb=head;while ((pb->num!=num) && (pb->next!=NULL)){pf=pb;pb=pb->next;} if(pb->num==num){
        /* 注意此处需要对头指针进行特殊处理 */if(pb==head){head=pb->next;}else{pf->next=pb->next;}free(pb);printf("The node is deleted\n"); }else{printf("The node not been found!\n");}return head;
}

有头结点的情况

TYPE * delete(TYPE * head,int num)
{TYPE *pf,*pb;if(head->next==NULL){ printf("\nempty list!\n");return NULL;}pf = head;pb=head->next;while (pb->num!=num && pb->next!=NULL){pf=pb;pb=pb->next;} if(pb->num==num){ pf->next=pb->next;free(pb);printf("The node is deleted\n"); }else{printf("The node not been found!\n");}return head;
}

经以上删除结点代码看出,当没有头结点时,每次删除时都得去做下特殊判断,而删除带有头结点的链表时,删除的处理上更具有统一性,这也体现了链表有头结点的优点。

头指针:
  指向单链表的第一个结点的指针, 如果单链表有头结点,则头指针指向头结点 ,如果单链表没有头结点,则头指针指向第一个首元结点。
首元结点:
单链表中第一个有数据元素的结点。如果单链表有头结点,则首元结点为头结点的下一个结点,如果单链表没有头结点,则首元结点就是单链表的第一个结点。
三个概念的图模型如下:
1.有头结点

无头结点

头指针,头结点,首元结点的区别,头结点的优点相关推荐

  1. 【头结点】【头指针】【首元结点】

    2022 -1-14 文章目录 2022 -1-14 1. 定义: 2. 哨兵(头结点) 3. 有无头结点的单链表的创建 3.1 有头结点 3.1.1 头插法: 3.1.2 尾插法: 3.2 无头结点 ...

  2. 头指针和头结点意义和区别

    1.介绍 链表中第一个结点的存储位置叫做头指针,那么整个链表的存取就必须是从头指针开始进行了.之后的每一个结点,其实就是上一个的后继指针指向的位置.链式存储时只要不是循环链表,就一定存在头指针. 2. ...

  3. 数据结构中的头结点和头指针

    数据结构中的头结点和头指针 (1)头指针: 头指针指链表指向第一个结点的指针,头指针具有标识作用,若链表有头结点,那么头指针即为指向头结点的指针. (2)头结点:头结点是为了方便而设置,它放在链表中第 ...

  4. 带头结点单链表、不带头结点单链表(头指针单链表)

    1.头结点和头指针的区别 1.1区别: 头指针表明了链表的结点,可以唯一确定一个单链表. 头指针指向链表的第一个结点,其记录第一个存储数据的结点的地址. 头结点是点链表的第一个结点,若单链表有头结点, ...

  5. 数据结构:头指针,头结点详解(新手.小白)

    如果不想看定义的话,可以看我的第二部分,里面有我自己遇到的一些疑难. 下文中出现的有关于java的,也有c语言的指针(可以看成java的引用变量),觉得写得不好,多多包涵 目录 (一)定义详解 (二) ...

  6. 单循环链表中设置尾指针比设置头指针更好的原因

    尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便. 设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next ...

  7. C++之链表中头指针、头节点、首元结点的

    头指针:顾名思义是一个指针,指向链表的开始地址: 头结点:第一个节点,该节点只有地址信息,改地址指向下一个结点,数据域无信息: 首元结点:含第一个元素的结点,为链表的实际开始位置,数据域包含第一个数据 ...

  8. 软考题目之头结点、头指针和首元节点

    遇到一个让人迷惑的题目. 以下关于线性表采用链式存储时删除节点运算的描述,正确的是() A.带头结点的线性链表删除结点时,不需要更改头指针. B.带头结点的线性链表删除第一个结点时,需要更改头指针. ...

  9. 怎么样让指针指向尾结点C语言,带头结点头指针与带头结点尾指针的学习

    单循环链表 对于单链表而言,如果每次在遍历到单链表中间处时需要遍历整个链表,此时只能往后遍历,前方的指针便会丢失.如图1所示,此时若链表遍历到a2处依旧可以通过尾结点循环到a1处,这是单链表所不能解决 ...

最新文章

  1. 细数高光时刻,2020全球科技巨头如何激战AI?
  2. LINUX :标准c库
  3. android+apk反编译+Mac
  4. memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存
  5. python亲密度_859. 亲密字符串(Python)
  6. python 白化_MeteoInfo和Python显著性检验
  7. BugkuCTF-MISC题where is flag2
  8. EMC业务连续性和容灾服务
  9. MSDN Windows XP Professional x64 Edition with SP2 +VL简体中文语言包+序列号
  10. 炫炫炫的十六进制编辑器
  11. event mpm php,apache的mpm的几种模式
  12. python读取海康视频流(rtsp格式)
  13. ASEMI双向可控硅BTA12A,BTA12A特征,BTA12A主要用途
  14. HTML5+CSS3新特性
  15. spring源码解析之IOC核心体系结构
  16. 停车还能360全方位影像_路虎(揽胜运动星脉极光发现)车主如何选购360全景安全辅助系统...
  17. iOS9不受信任的企业开发人员,无法信任
  18. JSM之ActivityMQ
  19. The following packages have unmet dependencies问题解决
  20. BBS系统的设计与实现

热门文章

  1. 四年上册级计算机教学计划,四年级上学期教学计划(通用5篇)
  2. cellpadding ,cellspacing的意思
  3. 80端口和8080端口的区别以及详情
  4. 2021年全球无水氢氟酸收入大约3120.8百万美元,预计2028年达到3634.6百万美元
  5. 前后端不分离到分离演变,优势,前后端接口联调,排错
  6. LayUi数据表格数据太多导致下拉框卡顿问题
  7. 【Linux 0.11】第六章 引导启动程序
  8. 数据的封装与解封装:TCP/IP五层协议
  9. Terracotta 3.2.1简介 (一)
  10. 第一届PyCon China小记