
发表日期: 2021-04-14 15:09:15 浏览次数:128
馆陶400电话办理【馆陶网站公司】馆陶百度优化、馆陶域名注册、馆陶网店美工、馆陶微信公众号托管
馆陶县,河北省邯郸市下辖县 [1] ,地处河北省东南部,以卫运河为界与山东省冠县、临清市毗邻。全县辖4镇4乡277个行政村,总面积456平方公里,其中耕地面积48万亩,总人口36万人。馆陶是千年古县,赵王“在城(今冠县东古城)西北七里陶丘侧置馆,故名馆陶”,自西汉初置县,已有2200多年历史。
馆陶县先后荣获中国蛋鸡之乡、中国黑陶艺术之乡 、中国粮画之乡、中国轻工轴承之乡、中国黄瓜之乡、中国漆画艺术之乡、全国休闲农业和乡村旅游示范县、全国电子商务进农村示范县、全国义务教育发展基本均衡县、全国中医工作先进县、全国群众体育工作先进县等等30余项国家级殊荣。
近年来,馆陶县着力打造了五张名片。一是“最大”,禽蛋交易市场金凤市场,单体全国最大,鸡蛋远销广东、广西等地,2016年交易额达到110亿元;二是“最优”,馆陶是中国著名的黑陶艺术之乡,现代黑陶艺术经过馆陶人的继承和创新,达1000多个品种;三是“最好”,馆陶是中国唯一的黄瓜之乡,馆青牌黄瓜,连续四年荣获中国绿色博览会金奖;四是“最佳”,馆陶有独一无二的富含三价有机铬的黑小麦,可应用于抑制血糖和抗肿瘤等医学领域;五是“最美”,粮画小镇被评为“中国十大最美乡村”,即将由3A级景区升级成为国家4A级旅游景区。 [2-6]
2020年4月,被河北省体育局评选为“2019年度体育工作最佳县(市、区)”。
有些时候,在表示节点结构体中包含指向其父节点的指针是很有用的,而根节点的父指针为NULL。例如,示例5.12中的结构体就成了
typdef struct NODE *pNODE;struct NODE {
char letter;
int isWord;
pNODE leftmostChild, rightSibling, parent;};复制代码有了这种结构体,就可以确定某给定节点表示的单词了。不断回溯父指针,直到到达根节点,我们就可以确认根节点,因为只有它的parent指针的值是NULL。这一路下来的letter字段就倒着拼出了该单词。
1. 对图5-5所示树中的每个节点,它们的最左子节点和右兄弟节点。
2. 请进行下列操作。
(a) 将图5-5中的树表示为分支系数为3的单词查找树。
(b) 用最左子节点指针和右兄弟节点指针来表示图5-5中的树。
每种表示方式各需要多少字节的内存?
3. 考虑英语中单数人称代词的如下集合:I、my、mine、me、you、your、yours、he、his、him、she、her、hers。对图5-7所示的单词查找树加以补充,从而将这13个单词都包含在内。
4. 假设某部完整的英语词典包含了2 000 000个单词,以及1 000 000个单词前缀——也就是在其尾部加上0个或多个字母便能构成单词的字母串。
(a) 这部词典的单词查找树共有多少个节点?
(b) 假设使用示例5.10中的结构体表示节点。设指针需要4字节,且信息字段letter和isWord各需要1字节,那么这棵单词查找树需要多少字节?
(c) 在(b)小题计算出的空间中,有多少是被NULL指针占据的?
5. 假设用示例5.12中的结构体(最左子节点右兄弟节点表示)来表示习题(4)中描述的词典。假设指针和信息字段占据的空间与习题(4)的(b)小题中的假设相同,那么这种表示中这棵树需要占据多少空间?在该空间中NULL指针占的比例又是多少?
6. 在树中,如果节点c 同为x 和y 的祖先,而且c 的真子孙中没有一个同时是x 和y 的祖先,那么就说c 是x 和y 的最低共同祖先。编写程序,使其能找出给定的树中任一对节点的最低共同祖先。在这种程序中使用什么数据结构表示树比较好?
树的表示的对比
这里总结了树的指针数组表示(单词查找树)与最左子节点右兄弟节点表示的相对优势。
指针数组表示带来了更快的子节点访问速度,不管有多少子节点,到达任意子节点都只需要O(1)的时间。
最左子节点右兄弟节点表示占用的空间更少。以图5-7所示的单词查找树为例,如果使用指针数组表示,那么每个节点含有26个指针,而如果使用最左子节点右兄弟节点表示,每个节点只含两个指针。
最左子节点右兄弟节点表示不要求对节点的分支系数加以限制,因此可以在不改变数据结构的前提下表示具有任一分支系数的树。然而,如果使用指针数组表示,一旦选择了数组的大小,就不能表示具有更大分支系数的树了。
对树进行的递归操作可以自然清晰地写下来,这样的操作数量之多突显了树的实用性。图5-13展示了接受树的节点n 作为参数的递归函数F (n)的一般形式。F 首先会执行一些步骤(也可能不执行任何步骤),我们将其表示为操作A0。接着,F 会对n 的第一个子节点c1调用它自身。在这次递归调用中,F 将会“探索”以c1为根节点的子树,进行F 对树进行的任何操作。当该调用返回对节点n 的调用时,就会执行另一个操作A1。接着F 会在n 的第二个子节点上被调用,引起对第二棵子树的探索,以此类推,就是对n 的操作与在n 的子节点对F 的调用交替着进行。

图 5-13 对树进行递归的函数
对树进行简单的递归会产生树的节点标号的前序排列(preorder listing)。这里的操作A0是打印节点的标号,而其他的操作也无非是些“分门别类进行记录”的操作,这些操作可以让我们访问给定节点的每个子节点。效果就是,如果从根节点开始逆时针环游访问树中的每个节点,在第一次遇到这些节点时会将它们的标号打印出来。请注意,只有在第一次访问某个节点时才将其标号打印出来。这种环游如图5-14中的箭头所示,访问这些节点的顺序是+a+*-b-c-*d*+。这一节点标号序列的前序排列是+a*-bcd。

图 5-14 表达式树及其环游
假设为表达式中标号为一个字母的节点使用最左子节点右兄弟节点的表示方式。内部节点的标号是该节点处的算术运算符,而叶子节点的标号是表示操作数的字母。节点和指向节点的指针可以按照如下方式定义。
typedef struct NODE *pNODE;struct NODE {
char nodeLabel;
pNODE leftmostChild, rightSibling;};复制代码函数preorder如图5-15所示。在随后的解说中,可以很自然地将指向节点的指针看作节点本身。
void preorder(pNODE n)
{
pNODE c; /* 节点 n 的子节点 */(1) printf("%c\n", n->nodeLabel);(2) c = n->leftmostChild;(3) while (c != NULL) {(4) preorder(c);(5) c = c->rightSibling;
}
}复制代码图 5-15 前序遍历函数
操作“A0”由图5-15所示程序的以下几个部分组成。
1. 在第(1)行,打印节点n 的标号;
2. 在第(2)行,将c 初始化为n 的最左子节点;
3. 在第(3)行,执行第一次c != NULL的测试。
第(2)行会初始化一个循环,在该循环中,c 会依次成为n 的每个子节点。请注意,如果n 是叶子节点,那么c 就会在第(2)行被赋上NULL值。
第(3)行到第(5)行的while循环会一直进行,直到遍历完n 的所有子节点。对每个子节点而言,会在第(4)行对该节点递归地调用函数preorder,接着在第(5)行行进到下一个子节点。i≥1的每个操作Ai,都是由让c 在n 的子节点中移动的第(5)行,以及测试是否遍历完子节点的第(3)行组成的。这些操作都只是分门别类地记录而已,与此相比,第一行中的操作A0完成的是关键步骤:打印标号。
对图5-14中所示树的根节点调用preorder的一系列事件可总结为图5-16所示的情形。每一行左侧的字符就是在对preorder(n)的调用正在被执行时节点n 的标号。因为没有哪两个节点的标号会相同,所以使用节点的标号作为其名称是没有问题的。请注意,打印出的字符是+a*-bcd,这一打印顺序就和环游的顺序一样。
调用 preorder(+)(+) 打印 +(+) 调用 preorder(a)(a) 打印 a(+) 调用 preorder(*)(*) 打印 *(*) 调用 preorder-)(-) 打印 -(-) 调用 preorder(b)(b) 打印 b(-) 调用 preorder(c)(c) 打印 c(*) 调用 preorder(d)(d) 打印 d复制代码
图 5-16 递归函数preorder对图5-14所示树进行的操作
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878