匿名用户

1级

2013-04-27 回答

楼上的哥们好像回答的方向偏了

指针的声明

指向类型 *p;

这个*就标志这这是一个指针,声明之后,变量p在调用的时候就不是调的指针本体了,而是指针所指的目标!

例如:p->next

这不是指针p的next,而是指针p所指向的目标中的next

结构体作为自定义的数据结构,创建后系统只能返回整个结构体的首地址,所以只能用一个指针来接,结构体中指针变量命名为next只是国际惯例,你就算改成*n也一样,只是以后用的时候:

p->next 改成 p->n 就可以了

指针赋值常用的有两种:

1、把目标的地址取来赋给指针

p = & target //&就是取地址符

2、把另一个指针所指向的目标的地址赋给指针

p = q;

追问:

这个P->next为什么表示指向下一个呢?如果用线性表可以用++i什么的来指向下一个,可是这个没有类似的啊!而且双向链表中,定义改变了一下,

typedef struct DuLNode //定义结构体

{

ElemType data;

struct DuLNode *prior;

struct DuLNode *next;

}DuLNode,*DuLinkList;

然后p->prior就表求指向p的前一个元素,这是怎么做到的啊?在我看来,next和prior的定义是一样的形式,怎么会有不同的效果呢?

追答:

p也是可以执行++操作的,意思就是访问p指针所在内存地址的下一个地址中的数据,但是这个p指针变量是独立声明的,他的下一个地址里面是什么数据你是不知道的,所以单独的p++是没有意义的。

你所说的线性表,我理解为就是数组或者在物理地址上是连续的一种存储结构,在物理地址与逻辑地址存在关联的时候,p++才有意义,因为你知道,当前地址下一个地址中的数据,就是你线性表中下一个数据。

p++并不是单纯的线性向下探索一个物理地址,它会根据p所指向的数据类型来判断++到底是向下探测几个,比如int *p,那p++就是向下探测一个,如果是你这样的DuLNode *p,就是计算出一个结构体一共需要多少个地址空间,这时的++就是向下探测一个结构体的空间,去寻找下一个结构体,当然,前提是物理地之上,这两个结构体是挨着的!!!

而链表最大的特性就是:节点可以不是物理连续的,他们靠指针来串起来,让你可以从逻辑上认为是连续的一个整体。

关于你的第二个问题:“然后p->prior就表求指向p的前...”

独立来看一个结构体是没有意义的,它里面的*prior、*next仅仅是一个变量,它可以被赋成任何地址,至于它是否能够成为一个双向链表的节点,是由你在实际创建的过程中决定的。

你创建了节点A,并认为它是头节点

然后创建了节点B,作为第二个节点,

并把A的地址赋给B的prior,这时,prior才成为B的前一个节点

同样,把B的地址赋给A的next,这时,A的next才成为了A的下一个节点

以此类推....

假如你将A的prior和next全设为B,B的prior和next全设为A,那么这就建立了一个最简单的环形链表,所以结构体及其变量具体代表什么意思,是看你怎么用来决定的

c语言next函数定义,c语言的数据结构中,next是如何指向下一个元素的?相关推荐

  1. c语言atoi函数定义,C语言函数 atoi()

    C语言函数 atoi() C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面我们来看看C语言函数 atoi() C语言函数 ...

  2. c语言中next如何用,c语言的数据结构中,next是如何指向下一个元素的?

    在函数中不是有q->next=p:这时q是插入前的尾节点.那样q的的下一个(新插入的节点)就由q指向节点里的字段next指向了. 单链表的插入只需让s->next 和p->next的 ...

  3. r语言 matlab 函数定义,R语言-编写自定义函数 ZZ

    一.函数构造器 每一个R函数都包括三个部分:函数名,程序主体以及参数集合,在编写自定义R函数时,需要将三个部分各自储存在一个R对象中.这里需要使用function函数,形如: my_function ...

  4. c语言malloc函数程序,c语言 malloc函数详解

    谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道. 1.关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果: ...

  5. 校园导游图C语言数据结构,用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx...

    用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下 ...

  6. 一个完整的c语言程序结构图,用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码.docx...

    用C语言和数据结构中的无向图存储结构编一个校园导游图完全的程序代码 #define Infinity 1000 #define MaxVertexNum 35 #define MAX 40 #incl ...

  7. pandas使用rename函数重命名dataframe中数据列的名称、从而创建一个包含重复列名称的dataframe数据集

    pandas使用rename函数重命名dataframe中数据列的名称.从而创建一个包含重复列名称的dataframe数据集 目录

  8. c语言 编程 函数声明,C语言编程开发中的函数声明与定义

    函数功能的使用在许多编程开发语言中都是有不同的使用方法的,而今天我们就一起来了解一下,在C语言编程开发中的函数功能使用与定义. 对函数的"定义"和"声明"不是一 ...

  9. c语言pow函数用法_C语言基础的不能再基础的程序知识!“hello world”!

    涉及到的知识点有:include有两种用法.{}大括号用法解释.C语言自定义名字的要求. c语言库函数printf的解释.编译错误有两种.调用system函数.c语言编译过程. 操作系统结构.指令集中 ...

  10. c语言程序设计函数6,C语言程序设计》第6章函数-XiamenUniversity.PDF

    厦门大学非计算机专业本科生公共课 (2012-2013第2学期) <C语言程序设计> 第6章 函数 林子雨 厦门大学计算机科学系 E-mail: ziyulin@ 个人主页:/linziy ...

最新文章

  1. opencv中的createsamples.exe生成vec文件注意事项
  2. html仿微信滑动删除,使用Vue实现移动端左滑删除效果附源码
  3. jquery 获取 A 标签 超级链接属性
  4. xrdp完美实现Windows远程访问Ubuntu 16.04
  5. FreeRTOS内核实现05:支持多优先级
  6. 应用安全-软件安全-漏洞CVE整理
  7. 多个切点 boot spring_spring基于aspectJ的切点表示
  8. ef mysql 分页查询语句_MySQL、Oracle和SQL Server的分页查询语句
  9. 目标决定人生——没有目标就失去一切 (转载)
  10. C# 支付宝小程序 ---小程序支付
  11. 【小程序开发之制作首页】
  12. python的turtle库认识和学习(3)之窗体大小和位置
  13. 酷开系统壁纸模式,百变画作颠覆想象
  14. 2016.1云南之旅
  15. oppo手机怎么查计算机记录,oppo怎样查通话记录(oppo手机怎么查以前的通话记录)...
  16. Day10QRadiobutton2021-09-24
  17. MySQL按天查询语句
  18. linux系统切换root用户的多种方式
  19. 任天堂战略聚焦与取舍学习笔记
  20. cubemx 配置sd卡 读写测试程序

热门文章

  1. CocosDashboard课堂笔记
  2. wifi大师小程序独立版3.0.8源码
  3. R语言常见报错及解决方法
  4. QGIS基本功 | 12 图层的混合模式
  5. UltraVNC源码编译流程
  6. busybox linux使用教程,使用BusyBox制作Linux根文件系统
  7. java十进制_JAVA 十进制 转换成 三进制
  8. 防干扰继电器控制电路
  9. 新浪微博技术架构分析-转载
  10. javascript写的日历控件(收藏)