KimYDae 2022-09-14 09:23 采纳率: 83.5%
浏览 65
已结题

数构:头指针,尾指针,头节点是什么又有什么关系?

头指针,尾指针,头节点是什么又有什么关系?
一个链表可以同时拥有头指针和尾指针吗?
头指针有空间吗?是一个节点吗?
一个题:
在循环链表中,将头指针改设为尾指针(rear)后,其首元节点和尾节点的存储位置分别是:rear->next->next和rear
我以为是rear->next和rear,认为头指针只是一个虚的东西,不存在什么空间之类的,只是一个指针,所以以为尾指针指向的节点就是首元节点。我的理解哪里有问题?
麻烦指点下,谢谢(*°∀°)=3

  • 写回答

4条回答 默认 最新

  • qzjhjxj 2022-09-14 12:54
    关注

    头指针、尾指针,首先明确他们就是两个指针变量,头尾的定语只是为了方便判断和记忆人为的加上去的,既然是变量,肯定得有存放他们的地方,只是这个空间需要很小,32位系统只占4个字节,64位占8个字节,我们姑且把它理解为现实生活中的一张车票。链表,把它简单化对应我们生活中的火车,链表头节点把它对应为火车头,链表其他结点就对应一节节车厢,都占了一定的空间,一节车厢(结点)所占的空间和一张纸(指针)所占的空间不是一个数量级的。现实生活中,我们是怎么知道有这列火车的存在的,怎么找到它的,靠的就是车票,因为我们把这列火车车头编个号如:G1234,然后把这号写在那张纸上,当我们拿到这张车票时,就顺着G1234这号找到了这列火车,然后就很容易的登上它的任意一节的车厢,因为它每节车厢都有编号的,类似于链表的每个结点都有一个地址编号,火车头在哪里,整列列车就在哪里,链表也是一样,链表头结点地址知道了,也就控制了整个链表。
    头指针:指向链表头结点的指针。尾指针:指向链表最末尾结点的指针。
    代码里这样定义:
    Node* head, *p; 这里只是定义了两个指针变量,它们仅仅就是指针。
    head = (Node*)malloc(sizeof(Node)); 这句里用malloc()函数申请了一块内存空间,即所谓的sizeof(Node)大小的一个结点(指定它是链表的头结点),并且把这块空间的地址值记录在指针 head 里,即我们讲的,此时指针 head 就是指向链表头结点的指针,一般如果是头结点的指针,为了方便控制链表,不会改变它的指向,后续代码里也不直接对它进行操作,它就是火车头,让它成为一个标志屹立不倒,直到程序运行结束。
    p = head; 这句就是让指针 p 也指向链表的头结点,后续通过 p 去对链表进行操作,而不会影响到 head。
    一个链表可以同时拥有头指针和尾指针,可以让任意多的指针都指向链表,就像车票一样,列车不可能只售一张车票,都要看实际的需求。
    单循环链表,就像单向的一列火车,火车头在最前面,火车尾部最后一节车厢后面是断的,再没有车厢了。
    循环链表,一列火车,把它尾部最后一节车厢链回到火车头,链成了一个首尾相连圆。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月26日
  • 已采纳回答 9月18日
  • 修改了问题 9月18日
  • 创建了问题 9月14日

悬赏问题

  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来