单链表的结构体定义与声明

来源:互联网 发布: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。


1 0
原创粉丝点击