数据结构有什么用,c++编程,大佬看看哪错了

在学数据结构有什么用参考课夲写了一段关于堆栈的代码,总是有bug好像是野指针空指针问题?有没有大佬帮忙看看

NET程序员面试秘笈 剑指offer 图解密码技術 大话数据结构有什么用 大话设计模式 妙趣横生的算法C语言实现 王道程序员求职宝典 程序员代码面试指南 程序员求职宝典 程序员面试宝典5th 程序员面试笔试宝典 算法的乐趣 编程之美 趣味C程序设计集锦 进军硅谷 零基础学数据结构有什么用 零基础学算法 Calculus 10th(Ron Larson) calculus early

 树是一种重要的非线性数据结构囿什么用直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构很象自然界中的树那样。树结构在客观世界中广泛存在如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用如在编译源程序如下时,可用树表礻源源程序如下的语法结构
又如在数据库系统中,树型结构也是信息的重要组织形式之一一切具有层次关系的问题都可用树来描述。┅、树的概述树结构的特点是:它的每一个结点都可以有不止一个直接后继除根结点外的所有结点都有且只有一个直接前趋。以下具体哋给出树的定义及树的数据结构有什么用表示
(一)树的定义树是由一个或多个结点组成的有限集合,其中: ⒈必有一个特定的称为根(ROOT)嘚结点;
⒉剩下的结点被分成n>=0个互不相交的集合T1、T2、。。。Tn而且, 这些集合的每一个又都是树树T1、T2、。
。。Tn被称作根的孓树(Subtree)。
树的递归定义如下:(1)至少有一个结点(称为根)(2)其它是互不相交的子树
1树的度——也即是宽度,简单地说就是结点的汾支数。以组成该树各结点中最大的度作为该树的度如上图的树,其度为3;树中度为零的结点称为叶结点或终端结点
树中度不为零的结點称为分枝结点或非终端结点。除根结点外的分枝结点统称为内部结点
2。树的深度——组成该树各结点的最大层次如上图,其深度为4;
3森林——指若干棵互不相交的树的集合,如上图去掉根结点A,其原来的二棵子树T1、T2、T3的集合{T1,T2,T3}就为森林;
4
有序树——指树中同层结點从左到右有次序排列,它们之间的次序不能互换这样的树称为有序树,否则称为无序树
5。树的表示
树的表示方法有许多常用的方法是用括号:先将根结点放入一对圆括号中,然后把它的子树由左至右的顺序放入括号中而对子树也采用同样的方法处理;同层子树与咜的根结点用圆括号括起来,同层子树之间用逗号隔开最后用闭括号括起来。
如上图可写成如下形式:
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
二叉树
1二叉树的基本形态:
二叉树也是递归定义的,其结点有左右子树之分逻辑上二叉树有五种基本形态:
(1)空二叉树——(a);
(2)只有一个根结点的二叉树——(b);
(3)右子树为涳的二叉树——(c);
(4)左子树为空的二叉树——(d);
(5)完全二叉树——(e)
注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形
2。两個重要的概念:
(1)完全二叉树——只有最下面的两层结点度小于2并且最下面一层的结点都集中在该层最左边的若干位置的二叉树;
(2)满二叉樹——除了叶结点外每一个结点都有左右子女且叶结点都处在最底层的二叉树,。
3二叉树的性质
(1) 在二叉树中,第i层的结点总数不超过2^(i-1);
(2) 深喥为h的二叉树最多有2h-1个结点(h>=1)最少有h个结点;
(3) 对于任意一棵二叉树,如果其叶结点数为N0而度数为2的结点总数为N2,
则N0=N2 1;
(4) 具有n个结点的完全②叉树的深度为int(log2n) 1
(5)有N个结点的完全二叉树各结点如果用顺序方式存储则结点之间有如下关系:
若I为结点编号则 如果IN,则无左儿子;
如果2*I 1N则无右儿子。
4二叉树的存储结构:
(1)顺序存储方式
type node=record
data:datatype
l,r:integer;
end;
var tr:array[1。
n] of node;
(2)链表存储方式,如:
type btree=^node;
node=record
data:datatye;
lchild,rchild:btree;
end;
5
普通树转换成二叉树:凡是兄弟就用线连起来,然後去掉父亲到儿子的连线只留下父母到其第一个子女的连线。
//////////////////////////////////////////////////////
2
基于顺序结构的顺序查找算法
(1)类型说明
typedef struct{
KeyType key;
InfoType otherinfo; //此类型依赖于应用
}NodeType;
typedef NodeType SeqList[n 1]; //0号单元用作哨兵
(2)具体算法
int SeqSearch(Seqlist R,KeyType K)
{ //在顺序表R[1
。n]中顺序查找关键字为K的结点
//成功时返回找到的结点位置,失败时返回0
int i;
R[0]key=K; //设置哨兵
for(i=n;R[i]。
key!=K;i--); //从表后往前找
return i; //若i为0表示查找失败,否则R[i]是要找的结点
} //SeqSearch
全部

我要回帖

更多关于 数据结构有什么用 的文章

 

随机推荐