该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

首先是节点的创建:

创建的时候就要将数据填充到节点中,所以需要传入一个data参数,

还需设置两个节点的地址,一个是前节点,一个是后节点

也就是setPrev和setNext,之所以是Node*类型是因为

malloc这个函数返回的是它分配内存的地址

所以在节点创建时我们拿到的数据就是这个节点的地址数据,

地址数据当然应当用指针来保存

所以我们实际上对于每个节点的内容,以及节点与节点之间的操作都是通过指针实现的

那么我们怎么从createNode()这个函数中,获取到当前创建的新节点地址呢

有两种方案:

方案一:将节点地址作为返回值,但是有一个问题,我们要先分配一个内存,然后要往这个内存中填写数据,所以我们必然需要用到一个临时的指针变量currentNode记录这个节点的地址,然后在函数运行结束之前用return currentNode;但是这个变量是一个局部变量,其作用域很生命周期有限,并不能长久的保存malloc分配的地址数据。所以需要将createNode()这个函数声明为static,延长它的生命周期。

static Node* createNode(DataType data, Node *setPrev, Node *setNext)

{

Node *currentNode=(Node*)malloc(sizeof(Node));

currentNode->prev=setPrev;

currentNode->data=data;

currentNode->next=setNext;

return currentNode;

}

方案二:添加一个指针参数用来接收这个地址数据,

因为这个要接收的数据本身就是一个地址

所以用来接收这个数据的变量,类型必须是指针,

而这个变量又在createNode()函数外部,

要在函数中改变外部变量的内容,就要传入外部变量的地址,

所以这个接收参数currentNode实际上是一个指针的指针,

也就是我们所说的二级指针。

void createNode(DataType data, Node *setPrev, Node **currentNode, Node *setNext)

{

(*currentNode)=(Node*)malloc(sizeof(Node));

(*currentNode)->prev=setPrev;

(*currentNode)->data=data;

(*currentNode)->next=setNext;

}

双向循环链表c语言,双向循环链表的实现与使用相关推荐

  1. 【循环链表】数据结构——单向循环链表和双向循环链表操作笔记

    循环链表 一.单向循环链表 1.单向循环链表的节点 2.单向循环链表的结构 二.双向循环链表 1.双向循环链表示意图 2.双向循环链表节点设计 3.双向循环链表的一般性结构 4.双向循环链表头插法插入 ...

  2. C语言中链表的英文名字,数据结构C语言版 循环链表表示和实现(国外英文).doc

    数据结构C语言版 循环链表表示和实现(国外英文) 数据结构C语言版 循环链表表示和实现(国外英文资料) Data structure, C language, circular list repres ...

  3. 8位并行左移串行转换电路_双向移位寄存器 8位双向移位寄存器电路设计

    目录 摘要 .............................................................................................. ...

  4. 双向口 与 准双向口 区别

    C51的说明书上说:"Because Ports 1, 2, and 3 have fixed internal pullups, they are sometimes called qua ...

  5. 51单片机双向口和准双向口有什么区别

    双向口与准双向口的区别主要是:准双向口I/O口操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错.而双向口则不需要做此动作,因为双向口有悬浮态. 准双 ...

  6. 30KW储能PCS逆变器双向变流器设计,双向DCDC和三电平逆变PCS

    30KW储能PCS逆变器双向变流器设计,双向DCDC和三电平逆变PCS 1.此系列为30KW储能PCS逆变器设计方案资料,双向DCDC和三电平逆变PCS: 2.仿真源码含有并网和离网两个模型: 3.原 ...

  7. 双向口和准双向口有什么区别

    双向口与准双向口的区别主要是:准双向口I/O口操作时做数据输入时需要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来导致出错.而双向口则不需要做此动作,因为双向口有悬浮态. 准双 ...

  8. 【数据结构】之双向链表、双端(双向)链表、循环(双向)链表

    双向链表.双端(双向)链表.循环(双向)链表示意(简)图: 声明:下面各图中,箭头指向的是整个节点,而不是指向节点中的prior或next. 双向链表:只有一个指针指向最开始的结点. 双端(双向)链表 ...

  9. 双向循环链表 (C语言实现双向循环链表) ------- 算法笔记003

    概念 我们常说的单链表是有向的链表,因为链表1中有next指针它对应指向链表2的地址 而链表2无法指向链表1,所以我们说它是单向的链表. 而双向链表则是链表1可以访问到链表2,链表2也可以访问到链表1 ...

最新文章

  1. scrum回顾_Scrum和SAFe之间有什么不同
  2. ios xib 四等分_ios Xib的几种用法[转]
  3. Serverless五大优势,成本和规模不是最重要的,这点才是架构
  4. Dalvik class加载的处理
  5. python模拟app抢票_python并发编程多进程 模拟抢票实现过程
  6. json 反射java 实体_java反射实现javabean转json
  7. 字符url编码_HTML URL编码字符参考
  8. 钉钉日志范文100篇_钉钉的日志模板怎么修改 钉钉日志模板修改教程
  9. cmd命令不识别exp_sqlplus、exp、imp不是内部或外部命令,也不是可运行的程序
  10. 限制mysql资源使用率_MySQL--限制用户使用资源
  11. 诺基亚n9用linux软件,Nokia N9 卸载国行N9自带的第三方软件
  12. C#获取电脑硬盘序列号
  13. iOS 屏幕旋转的实践解析
  14. 转:getaddrinfo函数详解
  15. VS2019:C++程序lib静态库、dll动态库的生成和使用
  16. 联发科MT6873和MT6853的区别是什么?
  17. 异常 exception
  18. (application)javaweb中application的用法
  19. 车内看车头正不正技巧_最常见的3种车位倒库技巧,以后停车都不是事,建议收藏!...
  20. 剑指offer之二叉搜索树的后序遍历序列

热门文章

  1. 那些年,我在阿里当数据开发
  2. 一文看懂专有网络和交换机的定义及关系
  3. 前端内存优化的探索与实践
  4. 相信坚持的力量,我的程序员打怪升级之路
  5. 终于有人把Python讲清楚了!!
  6. IT 实力较量:决战超级数据中心之巅
  7. 开放华为30年研发能力与实践 助力DevOps真正落地
  8. 靓仔落泪,性能问题定位难倒我了
  9. 你好,请查收这封元旦祝福,CSDN云计算改版啦!
  10. python shell运行当前程序、可以按下_Python下调用Linux的Shell命令的方法