×

结构体和链表的区别

结构体和链表的区别(链表中LinkList L与LinkList *L的区别以及(*L).elem,L.elem L->next,(*L)->next的区别)

admin admin 发表于2024-02-03 04:34:52 浏览33 评论0

抢沙发发表评论

大家好,如果您还对结构体和链表的区别不太了解,没有关系,今天就由本站为大家分享结构体和链表的区别的知识,包括链表中LinkList L与LinkList *L的区别以及(*L).elem,L.elem L->next,(*L)->next的区别的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

链表中LinkList L与LinkList *L的区别以及(*L).elem,L.elem L->next,(*L)->next的区别

typedef struct Node{int elem;struct node * next;}node,*LinkList;对于LinkList L: L是指向定义的node结构体的指针,可以用-》运算符来访问结构体成员,即L-》elem,而(*L)就是个Node型的结构体了,可以用点运算符访问该结构体成员,即(*L).elem;对于LinkList *L:L是指向定义的Node结构体指针的指针,所以(*L)是指向Node结构体的指针,可以用-》运算符来访问结构体成员,即(*L)-》elem,当然,(**L)就是Node型结构体了,所以可以用点运算符来访问结构体成员,即(**L).elem;在链表操作中,我们常常要用链表变量作物函数的参数,这时,用LinkList L还是LinkList *L就很值得考虑深究了,一个用不好,函数就会出现逻辑错误,其准则是:如果函数会改变指针L的值,而你希望函数结束调用后保存L的值,那你就要用LinkList *L,这样,向函数传递的就是指针的地址,结束调用后,自然就可以去改变指针的值;而如果函数只会修改指针所指向的内容,而不会更改指针的值,那么用LinkList L就行了;下面说个具体实例吧!#include 《stdio.h》#include 《stdlib.h》typedef int ElemType;typedef struct Node{ElemType elem;struct Node * next;}Node, * LinkList;//初始化链表,函数调用完毕后,L会指向一个空的链表,即会改变指针的值,所以要用*Lvoid InitList(LinkList *L){*L = (LinkList)malloc(sizeof(Node));(*L)-》next = NULL;}//清空链表L,使L重新变为空链表,函数调用完后不会改变指针L的值,只会改变指针L所指向的内容(即L-》next的值)void ClearList(LinkList L){ LinkList p; while(p = L-》next) { L-》next = p-》next; free(p); }}//销毁链表L,释放链表L申请的内存,使L的值重新变为NULL,所以会改变L的值,得用*Lvoid DestroyLlist(LinkList *L) { LinkList p; while(p = (*L)) { (*L) = (*L)-》next; free(p); } free(*L); *L = NULL;}int main(){LinkList L = NULL;InitList(&L);ClearList(L);DestroyList(&L);}

类链表的实现和结构体链表的实现有什么区别

基本上没什么区别,要说区别的话应该是节点的申请与释放类节点通过构造函数与析构函数实现节点的申请与释放结构体没有构造函数与析构函数,所以需要手动去定义与释放!个人理解!

链表与普通变量有何不同

没有区别。根据查询链表的性能显示,链表与普通变量没有区别,链表的定义和普通结构体变量的定义是一样的,但是链表是指针变量与普通变量没区别。链表结构体变量由数据域(任何数据)和指针域组成。

“数据结构” 和 “数据类型” 两个概念的本质是什么,两者的区别与联系是什么它们是从属关系吗

数据结构与数据类型不是孤立的,首先你要知道他们都是为编程、为算法服务的,其次值,数据类型,数据结构相互是有关联的。那么什么是算法?算法就是解决问题的步骤,即使是烹饪,也是算法,因为它需要一定的变量输入(各种原料配料),通过一定的解决问题的步骤(烹饪),然后得出结果,烹饪过程就是其中的算法。这些输入的变量(比如盐、糖、油、调味料、肉块),就是数据(或者说是值),这些数据有自己的特点,油用ml衡量,糖盐用汤匙衡量,肉块用g衡量。这些衡量的方法就是数据类型。在算法中,所有的数据都有类型,整数型、浮点型、字符型、字符串型、布尔型。。。 那么什么是数据结构?算法中要输入大量数据并对这些数据进行处理,最终得到输出结果。而在这些数据的输入输出、调用和处理过程中,我们要保存各种各样的数据并有效的管理数据。大量数据的有效管理机制就叫做数据结构。像上面烹饪的例子中,你如何安放这些糖盐肉,以便你在处理烹饪的时候可以更快捷不会手忙脚乱,这个安放的方法,就叫数据结构。有代表性的数据结构:  数组:连续无间隙排列的数据结构叫做数组。线性排列的是一维数组,像长方形一样横竖排列的是二维数组,像立方体一样排列的是三维数组。  链表:数据按照顺序排列的数据结构叫做链表。链表中的数据可以远距离存放,数据是在链表的箭头连接的结点中顺序管理的。  栈:类似于在桌上堆书一样来管理数据的数据结构叫做栈。栈是一种与数据输入顺序相反逆序输出的数据管理方式。  队列:如同超市收银队列一样的数据结构叫做队列。队列是数据输出顺序与数据输入顺序一致的数据管理方式。  树:像倒置的树枝一样的分叉的数据结构。 全手打,我想应该说的够清楚了,希望楼主不要纠结课本上那些字面的意思,展开联想,全局把握。最后最重要的,请采纳,谢谢。

C语言结构体类型

  在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

  在C语言中,定义一个结构的一般形式为:

  struct结构名  {  //成员表列  };

  

  成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:

  struct stu  {  int num;  char name;  char sex;  float score;  };

  

  在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。

  然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。

  int a;//定义一个int类型的变量a  stu a; //定义一个stu类型的变量a  int *p; //定义一个int类型的指针p  stu *p; //定义一个stu类型的指针p  int a;//定义一个int类型的数组a,它有10个元素,每个元素是int类型  stu a;//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。

C++结构体定义链表,这三种形式有什么区别

定义typedef struct stu 后,你可以 stu stua; 定义struct stu1后,你可以struct stu1 stua;第三个你可以 stutype stua;但如果在第三个里,如果 stu没有先定义,编译会出错,或是stu2 *next;

内核链表和普通链表的区别

内核链表是一个双向链表,但是与普通的双向链表又有所区别。内核链表中的链表元素不与特定类型相关,具有通用性。普通链表的p1的next指针是指向的结构体p2的地址,p2的pre指针指向p1结构体的地址。而内核链表的p1的next指向的是p2结构体中包含pre和next部分的地址,的p2的pre指向的是p1结构体中包含pre和next部分的地址。依此类推,这就是区别。内核结构元素不与特定类型结构相关,任何结构体都可通过内核的添加成为链表中的节点。

C语言中链表与队列有什么区别

C语言的链表与队列是两种不同的概念:

链表是一种数据的存储方式,其保存的数据在内存中是不连续的,采用指针对数据进行访问;队列是一种数据结构,其特点是先进先出,后进后出;

队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。

SQQUEUE的第一个元素elemtype *elem;其实是指向了一个数组,该数组中存储着类型为elemtype的元素,然后front和rear就标识了队首和队尾元素对应的数组下标。typedef struct _Point{int x,y;}Point;#defineelemtype Point//这个elemtype可以是任意你自己定义的结构,可以是结构体,也可以是简单数据类型elemtype array={0};//这个是队列的数据结构,在这里是一个Point数组SQQUEUE queue={0};queue.elem=array;//这样array中的元素就是queue中的元素了。queue.front=queue.rear=queue.size=0;

数据结构|单链表表示的三种方法

对于线性表来说, 总得有个头尾,头部做为基准地址,如数组的数组名,链表的头指针。尾部做为结束的标志,数组使用一个长度属性来标识数组的结束位置,字符串使用转义字符’’,链表使用NULL指针来标识结束位置。

我们知道,数组的全部元素是集中存储,数组的基准地址是第一个元素的地址,也就是数组名的值,其它元素的索引都是一个整型常量,对元素的访问就是基准地址相对于索引的偏移,所以数组元素可以随机访问。

链式存储是分散存储,通过节点的指针域来建立一个节点与其下一个邻接节点的联系。链式存储的头指针虽然也是整个链式数据结构的基准地址,但要找到某一节点,需要顺序访问,从头节点开始,顺着每一个节点的指针域的值,一个节点一个节点地挼。

我们把链表中第一个节点的存储位置叫做 头指针 , 那么整个链表的存取就必须是从头指针开始进行了。之后的每一个节点, 其实就是上一个的后继指针指向的位置。有时,我们为了更加方便地对链表进行操作,会在单链表的第一个结点前附设一个结点,称为 头节点 。头节点的数据域可以不存储任何信息,谁叫它是第一个呢,有这个特权。也可以存储如线性表的长度等附加信息,头节点的指针域存储指向第一个节点的指针。

是否使用头节点,在实现链表的常用操作时代码的写法稍有区别,使用头节点的方法代码较为简洁。同时,也可以将这个表头节点指针封装到一个结构体中,并在结构体中增加链表长度等信息。

1 使用头节点的链表表示

加头结点的优点:

1)链表第一个位置的操作无需特殊处理;

2)将空表和非空表的处理统一。

2 不使用头节点的链表表示

3 链表和链表节点用不同的结构体来表示

链表用一个结构体来描述,封装一个节点指针做表头,并增加一个链表长度变量,需要时也可以增加一个节点指针做表尾。

-End-

以上就是我们为大家找到的有关“结构体和链表的区别(链表中LinkList L与LinkList *L的区别以及(*L).elem,L.elem L->next,(*L)->next的区别)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。