单链表的结构体定义与声明
来源:互联网 发布:windows下openssl安装 编辑:程序博客网 时间:2024/05/05 04:07
最近在计蒜客上学习C++,因为很多内容与之前C语言的课程完全相同,所以学起来很快,到今天还剩下链表和对象这最后两章,而这些也是C++所完全不同于C语言的内容,从零学起,细细琢磨,感觉要注意的东西还是挺多的。
感觉计蒜客在这两章上的讲解对我这个新手而言,有很多没有详细讲到,在很多地方我是很困惑的。所以我把之前因为没有训练导致没有引起重视的翁恺C语言课程最后一章链表的视频又重新看了一遍,又把自己的疑问在网上搜索了半天,内心的迷雾散了很多。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
先插播两个小知识点:
①“elemtype”代表所有可能的数据类型,简单明了的概括了整体。在算法中,除特别说明外,规定ElemType的默认是int型。
②关于C语言的struct
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。*/
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
产生疑问的源头:
//代码:
struct List { int num; List *next; };//其中List *next;为什么这样写?
解释是这样的:在这里,有一个知识点,即结构体是一种自定义的数据类型(这样一来,List *next的写法就很自然而然了)
已经定义的某种结构体类型可以视为一种标准的数据类型,它的使用方法与标准数据类型(如int,char等等)使用方法相同,可以用来定义变量、数组、指针。
所以List *next就是表示结构体List中的指向此类型结构体的指针成员next。
拓展:(以下拓展内容来自 @现代魔法 一个人建立与运营的学习网站与小IT社区。简明现代魔法)
A:在用代码描述单链表之前,我们需要定义一个结构体来描述单链表的结点。
typedef struct Node{ ElemType data; struct Node *next;}Node;typedef struct Node *LinkList; /* 定义LinkList */
B:从这个结构定义中,我们知道,结点由存放数据元素的数据域存放后继结点地址的指针域组成。
A:假设p是指向线性表第i个元素的指针,则该结点ai的数据域我们可以用p->data来表示,p->data的值是一个数据元素,结点ai的指针域可以用 p->next来表示,p->next的值是一个指针。p->next指向谁呢?当然是指向第i+1个元素,即指向ai+1的指针。(如图所示)
B:关于结构体 struct Node *next; 这么一句代码,为什么要这么写?我写成 int *next 行不行?
A:不行的。next是指向下一个Node,所以其类型必须是Node。int *next 只能指向int,而不能指向Node。所以必须定义为 Node 类型,但是 Node 是结构体,所以前面还得加上个 struct。
- 单链表的结构体定义与声明
- 单链表的结构体定义与声明
- 单链表结构的定义与声明
- 结构体的声明与定义
- 对单链表的结构体定义与声明
- 单链表的结构体定义和声明
- 单链表结构的定义与声明学习(待续)
- 结构体指针的声明和定义
- 结构体的定义声明、内存对齐
- C++中结构体的声明和定义的用法
- C++中结构体的声明和定义
- 声明与定义的区别
- 变量的定义与声明
- 模板的声明与定义
- 变量的定义与声明
- 变量的声明与定义
- 类的定义与声明
- 变量的声明与定义
- 墜落SOHO宅----一個自由職業者的反面教材
- 我的第一个iOS App
- 让jetty启用支持jsp功能
- jQuery源码学习(版本1.11)-Sizzle代码架构及整体匹配流程
- 自动控制的故事
- 单链表的结构体定义与声明
- Lua-cjson的safe模块
- Trie树
- git rebase -i HEAD~*
- Linux:-bash: ls: command not found;Linux:-bash: ***: command not found等每次打开终端都要重新设置,一次性解决方法(红帽Linux)
- Linux内核创建一个新进程的过程
- 使用LuaSocketHttp注意的地方
- Spring Integration in action 3 - 集成系统
- 三维空间中直线与平面的交点