首页 > 编程知识 正文

c语言的数据结构有哪些,c语言数据类型有哪几种

时间:2023-05-04 23:21:50 阅读:60951 作者:2446

在c语言中,数据结构是相互具有一个或多个特定关系的数据元素的集合,作为计算机存储、组织数据的方法的一般数据结构是线性数据结构(数组、链表、堆栈、队列和线性表)、树结构

教程建议: 《c语言教程视频》

什么是数据结构?

数据结构是计算机存储和组织数据的方法。 数据结构是相互具有一个或多个特定关系的数据元素的集合

大多数数据结构的实现都需要c语言指针和结构类型

以下,进入今天的要点或O(_) o的常见数据结构

(1)线性数据结构)元素之间一般存在一对一的关系,是最常用的数据结构,典型的是数组、堆栈、队列、线性表

)2)树形结构)节点之间存在层次关系,每层一个节点在能量上只能涉及上一层的一个节点,但同时可以涉及下一层的多个节点。 被称为“一对多”关系,常见的类型是树、山

)图形结构)在图形结构中,允许多个节点之间的关联称为“多对多”关系

接下来,我将简要介绍这些数据结构。

1、线性数据结构:典型有数组、堆栈、队列、线性表

(1)数组和链表

a、数组:包含相同类型的数据集,必须预先指定数组的长度。 包括一维数组、二维数组、多维数组等

b、链表:链表是c语言中广泛的应用结构,以动态分配内存的形式实现。 在任何一组存储单元中存储数据元素链表时,通常在每个元素中添加指针字段以指向后续元素

c、数组与链表的区别:

从逻辑结构来看,数组必须预先定义固定长度,通过动态地分配不能应对数据动态增减的状况的链表,能够应对数据动态增减的情况,容易插入、删除数据项(数组)

从内存存储来看,(静态)数组从堆栈分配空间(NEW创建的在堆中),对程序员来说方便快捷,但自由度小的链表从堆中分配空间,因此自由度高,但申请管理却很方便

从访问方式来看,数组连续存储在存储器中,所以能够利用下标索引随机访问; 链表是链式存储结构,在访问元素时只能线性地从前到后依次访问,因此访问效率低于数组

)2)堆栈、队列、线性表)可按序存储和链式存储方法存储

顺序存储—根据数据元素在存储空间中的相对位置表示元素之间的逻辑关系

链式存储—通过表示数据元素存储地址的指针表示元素之间的逻辑关系

a、堆栈:只允许在序列的末端进行操作,堆栈的操作只在堆栈的顶部进行。 一般的堆栈也被称为后退先进先出或先进先出的线性结构

顺序堆栈:采用顺序堆栈结构的堆栈称为顺序堆栈。 也就是说,必须将堆栈的元素存储在地址的连续区域中。 顺序堆栈的类型定义如下:

链式堆栈:采用链式存储结构的堆栈称为链式堆栈。

b、队列:只允许在序列两端操作,一般队列也称为先进先出线性结构

旋转队列是顺序存储结构的队列,必须根据队列的最大可能长度分配空闲存储。 其类型定义如下。

链队列:具有链存储结构的队列称为链队列,通常只需要设置头尾指针的链表头尾节点。

c、线性表:允许在数组任意位置操作,线性表操作位置不受限制,线性表操作非常灵活,常用操作包括在任意位置插入和删除,查询和修改任意位置的元素

顺序表)用顺序记忆结构表现的线性表称为顺序表,用一连串地址连续的存储单元一次存储线性表的数据要素。 即,存储位置相邻,表示相位顺序连续的两个要素之间的前驱和后继的关系,为了避免要素的移动,一般在顺序表的接口定义中只考虑在表的末尾插入要素或者删除要素。 这样实现的顺序表也可以称为堆栈表。

路线列表:通常包括单链表、双向链表、循环链表和双向循环链表

单链表:

双向链表:

线性表中两个存储结构的比较:

顺序表:

优点:在顺序表中,逻辑上相邻的两个要素物理上相邻,便于检索,无论访问哪一个要素,时间的复杂性都是o(1)

缺点:不适合在任意位置插入和删除元素。 平均时间的复杂性是o(n ),因为需要移动元素

链表:

优点:要在链接的任意位置插入或删除元素,只需修改相应的指针,而不需要移动元素; 根据需要动态分配。 不需要根据最大需求预先分配连续的可用空间

缺点:由于不方便查找,查找某个要素需要从第一个指针开始沿指针字段进行查找,因此平均时间复杂度为o(n )

2、树形结构:节点之间存在层次关系。 每层的一个节点有能量,只能与上一层的一个节点相关,但同时与下一层的多个节点相关。 被称为“一对多”关系,常见的类型是树、山

(1)二叉树:二叉树是递归数据结构,是一个包含n(n=0)个节点的有限集合,二叉树具有以下特征

二叉树可以是空树;二叉树的每个结点都恰好有两棵子树,其中一个或两个可能为空;二叉树中每个结点的左、右子树的位置不能颠倒,若改变两者的位置,就成为另一棵二叉树

(2)完全二叉树:从根起,自上而下,自左而右,给满二叉树的每个结点从1到n连续编号,如果每个结点都与深度为k的满二叉树中编号从1至n的结点一一对应,则称为完全二叉树

a、采用顺序存储结构:用一维数组存储完全二叉树,结点的编号对于与结点的下标(如根为1,则根的左孩子为2i=21=2,右孩子为2i+1=21+1=2)

b、采用链式存储结构:

二叉链表:

三叉链表:它的结点比二叉链表多一个指针域parent,用于执行结点的双亲,便于查找双亲结点

两种存储结构比较:对于完全二叉树,采用顺序存储结构既能节省空间,又可利用数组元素的下标值确定结点在二叉树中的位置及结点之间的关系,但采用顺序存储结构存储一般二叉树容易造成空间浪费,链式结构可以克服这个缺点

(3)二叉查找树:二叉查找树又称二叉排序树,或者是一课空二叉树,或者是具有如下特征的二叉树:

a、若它的左子树不空,则左子树上所有结点的值均小于根结点的值

b、若它的右子树不空,则右子树上所有结点的值均大于根结点的值

c、它的左、右子树也分别是二叉查找树

(4)平衡二叉树:平衡二叉查找树简称平衡二叉树,平衡二叉树或者是棵空树,或者是具有下列性质的二叉查找树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差的绝对值不超过1

平衡二叉树的失衡及调整主要可归纳为下列四种情况:LL型、RR型、LR型、RL型

(5)树:树是含有n(n>=0)个结点的有限集合,在任意一棵非空树种: a、有且仅有一个特定的称为根的结点

b、当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且T1,T2,…,Tm称为根的子树

(6)堆:堆是具有以下特性的完全二叉树,其所有非叶子结点均不大于(或不小于)其左右孩子结点。若堆中所有非叶子结点均不大于其左右孩子结点,则称为小顶堆(小根堆),若堆中所有非叶子结点均不小于其左右孩子结点,则称为大顶堆(大根堆)

(7)并查集:并查集是指由一组不相交子集所构成的集合,记作:S={S1,S2,S3,…,Sn}

(8)B树

3、图形结构:在图形结构中,允许多个结点之间相关,称为“多对多”关系,可分为有向图和无向图

更多编程相关知识,请访问:编程教学!!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。