c语言树形编程,C语言——数据结构(线性,树形,图形结构等)

数据结构

在学习数据结构之前我想先有一个大体的概念,所以在网上查了一些资料记录如下

常见的数据结构

1.线性结构

2.树形结构

3.图形结构

4.集合

一、线性结构(线性结构是一个有序数据元素的集合)

常用的线性结构有:线性表,栈,队列,双队列,串。

关于广义表、数组,是一种非线性的数据结构。

常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图

特征:

1.集合中必存在唯一的一个"第一个元素";

2.集合中必存在唯一的一个"最后的元素";

3.除最后元素之外,其它数据元素均有唯一的"后继";

4.除第一元素之外,其它数据元素均有唯一的"前驱"。

数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。

如(a0,a1,a2,…,an),a0为第一个元素,an为最后一个元素,此集合即为一个线性结构的集合。

相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。

栈、队列和线性表:

可采用顺序存储和链式存储的方法进行存储

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

链式存储:借助表示数据元素存储地址的指针表示元素之间的逻辑关系

栈(后进先出或先进后出的线性结构)

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

分为:顺序栈,链栈

队列(先进先出的线性结构)

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

分为:顺序队列,循环队列

线性表

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。

分为:顺序表,单向链表,双向链表,循环链表,双向循环链表。

二、树形结构(一层次的嵌套结构。 一个树形结构的外层和内层有相似的结构, 所以这种结构多可以递归的表示)

常见树形结构:二叉树,完全二叉树,二叉查找树,平衡二叉树,树,堆,并查集,B树。

二叉树

二叉树是一种递归数据结构,是含有n(n>=0)个结点的有限集合。

二叉树具有以下特点:

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

完全二叉树

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

二叉查找树

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

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

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

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

平衡二叉树

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

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

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

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

并查集

并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题

B树

在B-树中查找给定关键字的方法是,首先把根结点取来,在根结点所包含的关键字K1,…,Kn查找给定的关键字(可用顺序查找或二分查找法),若找到等于给定值的关键字,则查找成功;否则,一定可以确定要查找的关键字在Ki与Ki+1之间,Pi为指向子树根节点的指针,此时取指针Pi所指的结点继续查找,直至找到,或指针Pi为空时查找失败。

三、图形结构

图形结构是一种比树形结构更复杂的非线性结构。在树形结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关。而在图形结构中,任意两个结点之间都可能相关,即结点之间的邻接关系可以是任意的。

分为有向图和无向图

参考资料:百度百科,博客园等

你可能感兴趣的:(c语言树形编程)