铜仁市论坛

首页 » 分类 » 分类 » 数据结构C语言8磨刀霍霍
TUhjnbcbe - 2020/12/11 3:58:00
甲氧沙林价格 https://m-mip.39.net/baidianfeng/mipso_4322202.html

“说了这么多,数据结构用代码到底怎么写?”

我们知道,C语言可以用结构体,来描述一个复杂的数据类型。

结构体是个啥东西?

可以看下上一篇文噢

01

顺序表

我们知道,顺序表,可以用一个数组来存放顺序表里面的各个元素。

于是,我们可以这样定义一个顺序表的数据结构:

#defineMaxSize50typedefintElemType;typedefstruct{ElemTypedata[MaxSize];//存放顺序表元素intlength;//存放顺序表的长度}SqList;//顺序表的类型

如何建立一个顺序表?

voidCreateList(SqList*L,ElemTypea[],intn){L=(SqList*)malloc(sizeof(SqList));for(inti=0;in;i++)L-data=a;L-length=n;}

以下是代码解析,

CreateList是一个函数,用来创建一个空的顺序表,

传入两个变量,一个是顺序表的指针,一个是顺序表的长度。

首先,申请一块顺序表结构大小的空间,

在这里,sizeof(SqList)会返回SqList结构需要占用的内存空间大小,

malloc则是申请指定大小的内存空间,

申请到的内存空间,它是什么类型的?

所以在malloc前面进行了强制类型转换,加了一个(SqList*)。

L=(SqList*)malloc(sizeof(SqList));

再根据指定好的顺序表长度,对顺序表数组进行初始化。

所以这里用了一个for循环。

for(inti=0;in;i++)L-data=a;

循环结束,L里面的数组的所有元素,都被初始化了一个初始值了。

于是再指定新创建线性表的length属性。

L-length=n;

02

单链表

链表有什么东西?

有一个头指针,

有一个一个的链表节点。

链表节点里面有什么东西?

有这个节点存放的data,数据信息,

有这个节点的下一个节点的指针next。

于是我们可以这样写:

typedefintElemType;typedefstructLNode{ElemTypedata;structLNode*next;//指向后继结点}LinkNode;//声明单链表结点类型

如何创建一个单链表?

单链表整活更厉害一点,

我们有两个方法,头插法,和尾插法。

头插法

首先创建一个新的节点,把数据放入新的节点中;

然后将新节点的next指向链表头结点的next指向的节点,

也就是链表第一个数据节点;

然后修改头结点的next域,使之指向新节点。

于是可以这样写:

//头插法建立单链表voidCreateListF(LinkNode*L,ElemTypea[],intn){LinkNode*s;L=(LinkNode*)malloc(sizeof(LinkNode));//创建头结点L-next=NULL;for(inti=0;in;i++){s=(LinkNode*)malloc(sizeof(LinkNode));//创建新结点s-data=a;s-next=L-next;//将新结点插在原开始结点之前,头结点之后L-next=s;}}

然后就是尾插法,尾插法更简单点,

首先创建一个新的节点,把数据放入新的节点中;

然后将链表的最后一个节点的next域指向新节点就行了。

所以我们这样写:

//尾插法建立单链表voidCreateListR(LinkNode*L,ElemTypea[],intn){LinkNode*s,*r;L=(LinkNode*)malloc(sizeof(LinkNode));//创建头结点L-next=NULL;r=L;//r始终指向终端结点,开始时指向头结点for(inti=0;in;i++){s=(LinkNode*)malloc(sizeof(LinkNode));//创建新结点ss-data=a;r-next=s;//将结点s插入结点r之后r=s;}r-next=NULL;//终端结点next域置为NULL}

如果觉得有用,不点个再看么少年?↓[]~( ̄▽ ̄)~*

小冰冲冲冲

1