第十二章:使用结构和指针

GitHub 链接:ch12. 使用结构和指针

结构和指针创造了无数伟大的数据结构!

本章总结及注意点


部分课后习题解答

12.7 问题

  1. 当然可以。把有 current 的地方全部换成 *list,就行了。虽然少用了一个变量,但是增加了思维难度,不好理解,没啥大用途。

  2. 我觉得很好用啊,dummy->next = head; 这样不知道简化了多少代码和思维量。然而书中确实给出了最优的解法,但是 root 节点不就是 dummy 节点吗?真的不清楚纠结这两者区别有啥用。虽说记录变化的 link 指针的思想确实很重要。见参考答案:

  3. 不改,在相同值的前面。改了,在最后面。

  4. 我还以为要赋值为一个无效值…还是太年轻了啊…局部初始化、分离化设计、结构标签的不完整声明…tql!!!见参考答案:

  5. 这是直接申请一个空间,且没有 free()。当每次有重复值的时候,就会内存泄露一个空间!

  6. 当然可以,O(n2)O(n^2)O(n2) 扫一遍找到一个最大、最小值,插入一个新有序链表即可。

  7. 您这是把 trie 树都掏出来了啊。总结的模板:[字典树+模板] Trie树模板。参考答案:

12.8 编程练习

  1. 链表结构。可以记录链表中任意一点到末尾的节点数量。见 demo01.c

  2. 没必要写这题。无序链表全部扫描完毕,有序链表如果扫描位置大于当前数,则不需要再扫描后面的了,直接返回即可。

  3. 参考答案:这使得函数更加复杂,主要是因为根指针不再是操作方法与节点指针相同。见 demo03.c

  4. 经典问题了。参考:[E链表] lc206. 反转链表(反转链表+模板题)。我的这篇博文写的很细致,三种方法一一说明了!很建议学习!

  5. 不想写了。

  6. 同上。参考答案:注意这个程序中的间接链:this->bwd->fwdthis->fwd->bwd: if 这两种表达方式都已经用过不止一次了,创造可能会更好保存值的临时变量。见 demo03.c

  7. 动态内存分配的怎么说呢,用的太少了。一般直接拿数组模拟。[字典树+模板] Trie树模板

    参考答案:
    两个列表中的节点在结构上不同,这一事实排除了使用单个插入函数的可能性对于列表;这很不幸,因为每种情况都需要相同的逻辑的声明如果任何其他源文件需要下面的解决方案,那么它们应该在包含文件中。见 demo04.c

随笔

没啥好说的,链表边界情况很多。现在要么在力扣上拿结构体写,要么数组模拟单链表,不过结构体每次 malloc() 是很耗时间的。每次只申请一个 Node 节点,貌似听哪位佬说过,申请一个大空间和申请一个小空间操作系统所用的时间相差不大,即申请次数越多,所耗时间越多。

链表也是基础了,双链表用的少。后续有邻接表在图论题目中经常用到!

本章可以理解为语法的应用,尤其是结构和指针的联合使用创造出了很厉害的数据结构,这些前面都已经接触过了,所以我动手写的很少,初学者也不建议在这写,可以简单的写一写,然后数据结构直接找本书专项练习,大量写代码。

疑问

  1. 处理单链表头插时头结点改变的方法很秀,很细节。只需要保存需要改变的 link 指针就行了。一般在算法题中,尤其是力扣,遇见头结点会改变的链表,都会申请一个虚拟头结点来帮助处理,简化很多边界判断。

  2. 双链表改变指针指向的时候一定是要注意顺序的。

  3. P249-P252 整个就在做一件事情:乱秀!。采用一系列的代码优化方法,硬是提取公共无关项、整合 if-else 等等,写的秀是秀,但是看着都费劲啊…

[C和指针] ch12. 使用结构和指针相关推荐

  1. 指向结构体的指针和指向结构体指针的指针

    例如,struct T *ptr;是指向一个结构体的指针,也可以当做一个结构体数组来用. 可以把结构体当做 int 来看,int* 类型即可以指向一个整数,也可以指向数组. struct T ** p ...

  2. c语言如何传递结构体指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  3. python 结构体指针_C语言结构体指针(指向结构体的指针)详解

    当一个指针变量指向结构体时,我们就称它为C语言结构体指针的定义形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: //结构体 struct stu{ char *nam ...

  4. c语言结构体指针详解,结构体指针,C语言结构体指针详解

    结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用 ...

  5. C语言中结构体指针出现重定义,C语言结构体指针中包含结构体指针

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. 将C++代码转化为C的过程中,一些C++的特性无法使用 类内私有变量在类内公共 ...

  6. c语言 机构体传给指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  7. c结构体中定义的成员指针赋值与结构体指针作为成员函数参数的使用

    c语言定义结构体可以直接声明结构体变量的,如下 struct Student{char *name; int age; }xiaoming 这样以来,我们就定义了一个结构体类型,同时声明了一个结构体变 ...

  8. 函数返回结构体指针_9.3 结构体指针

    01指向结构体变量的指针 1.指向结构体对象的指针变量既可以指向结构体变量,也可指向结构体数组中的元素. 2.指针变量的基类型必须与结构体变量的类型相同. 3.C语言中允许把(*p).num用p-&g ...

  9. C语言 字符串转结构体,字符串指针转化为结构体指针!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include struct abc { unsigned int num; char c; }; typedef abc* pabc ...

最新文章

  1. 图灵五周年生日聚会圆满成功,多家媒体对此进行报道
  2. 丘成桐:中国人可以做世界一流学者
  3. [ 一起学React系列 -- 11 ] React-Router4 (1)
  4. 应用程序进程(二):启动线程池
  5. js监控键盘大小写事件
  6. python 装饰器 参数-如何将额外的参数传递给Python装饰器?
  7. JVM 的 工作原理,层次结构 以及 GC工作原理
  8. 启明云端分享| 基于ESP32-S2模块的彩屏86盒应用,有哪些亮点呢
  9. python函数的作用降低编程复杂度_Python函数式编程
  10. 前端学习(1127):递归求数学题2
  11. webpack5打包普通html项目,webpack打包其他资源
  12. python_07 函数作用域、匿名函数
  13. mysql自定义函数for循环_mysql自定义函数
  14. catalina java opts,catalina.bat中适当的位置设置JAVA_OPTS
  15. proxmox 控制台无法连接_Proxmox VE 5.4中的NAT网络-重置网络接口后,VM的连接消失了...
  16. 解决AS3.5在oppo系统更新后无法打包apk问题
  17. 微信小程序云开发——图片展示,视频播放案例
  18. 常用英语几大构词方法
  19. mysql pk uk ak,最重要的MySQL开发规范 全都在这了
  20. python爬取豆瓣top250信息并存入数据库中 | sqlite3

热门文章

  1. (资讯)华为员工利用Bug越权访问机密卖给第三方,获利1.6万元,被判有期徒刑一年
  2. [linux]linux mint系统CAD软件安装使用
  3. Ubuntu18.04屏幕分辨率问题
  4. Centos7 Docker环境部署系统漏洞扫描工具Nessus
  5. The Relationship Cure
  6. 华雨欢:昨日黄花在逐渐奋起的市场里夭折与否已没多少人关注
  7. 元宇宙:未来or骗局?
  8. 高一下册计算机教案,高一下册数学必修二教案
  9. 北京医院排名(去哪个医院合适)
  10. 27. hall霍尔传感器