【数据结构基础】结构体与链表 您所在的位置:网站首页 js有链表吗 【数据结构基础】结构体与链表

【数据结构基础】结构体与链表

#【数据结构基础】结构体与链表| 来源: 网络整理| 查看: 265

前言

学习数据结构的链表章节,如果对结构体的基础知识掌握不牢,就很难理解,下面先带大家理解结构体知识基础

结构体知识基础 析 :类型,变量名 数据类型:int char变量名:arr ch str name a x(等一些有含义或者常用的名称) 结构体类型的定义 struct 结构体类型名 { 数据类型名1 成员名1; 数据类型名1 成员名1; ... 数据类型名n 成员名n; };

我们自己定义的结构体类型地位上等价于int char,只是用起来稍微麻烦些

结构体变量的定义

间接定义法

struct 结构体类型名 { 数据类型名1 成员名1; 数据类型名1 成员名1; ... 数据类型名n 成员名n; }; struct 结构体类型名 变量名;

直接定义法

struct 结构体类型名 { 数据类型名1 成员名1; 数据类型名1 成员名1; ... 数据类型名n 成员名n; }变量名; 重命名结构体

typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。

若struct LNode {};这样来定义结构体的话。在申请变量LNode 时,需要这样写,struct LNode n;若用typedef,可以这样写,typedef struct LNode{}LNode; 。在申请变量时就可以这样写,LNode n; typedef struct Student { int a; }Stu; //如果没有typedef就必须用struct Student stu1;来声明 //如果有typedef就可以用Stu stu1;来声明 //这里的“类型名”Stu实际上就是struct Student的别名 单链表

单链表分为两个部分:数据域和结构域,简单来看就是结构体与指针的结合体,与递归的思想密不可分。

模板

typedef struct Lnode { ElemType data; //节点数据域 struct Lnode; //节点指针域 }Lnode,*LinkList; //LinkList为指向struct Lnode的指针 // 这里的 Lnode,*LinkList 都是类型名,struct Lnode 的不同表达形式 LinkList L; //定义链表L LNode *p; //定义节点指针

小贴士:

ElemType只是类型的统称 ,可以代表char int float......数据结构更注重方法,不针对特定的语言LinkList L 与LNode *L等价,但是后者不常用LNode *p 与LinkList p等价,但是后者不常用 初始化 头结点会在单链表的第一个结点之前附加一个结点,数据域可以不设任何信息,也可以记录表长等信息,指针域指向线性表的第一个元素结点头指针

通常会用头指针来标识一个单链表,不管带不带头结点,头指针始终指向单链表的第一个结点

void InitList(LinkList &L) { L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; }

程序解释:

LinkList &L:在调用函数时,实参一般不会被形参改变,但是在C++中,使用引用 & ,之后形参就可以影响实参了,LinkList L、LinkList& L、和LinkList *L这三者的区别

malloc(sizeof(LNode)),动态获取LNode的字节数,从而开辟新的空间,返回LinkList类型,详细解释请查看,malloc函数详解

单链表的销毁 //销毁 void DestoryList_L(LinkList &L) { LNode *p; while (L) { p=L; L=L->next; free(p); } }

注意事项:

因为单链表使用的空间是我们使用malloc动态开辟的,所以是需要我们手动去释放的。

但是要注意,对于单链表空间的释放,我们不能做到像顺序表那样一次性就释放掉,因为顺序表空间是一块连续的空间,但是,链表是一个一个结点构成的,一个结点malloc一次,它们不一定连续的空间,所以我们要一个结点一个结点的释放。

持续更新中...



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有