今日数构

1. 编程题:定义树的孩子兄弟表示法的存储结构,并实现如下图树的存储,并在主函数中验证。(运行结果截图)

#include "stdio.h"

typedef char DataType ;

typedef struct Node{

DataType data;

struct Node *firstchild, *nextsibling;

}CSTypeNode, *CSTypeTree;

CSTypeNode *tp;

int flag=0;

void GetTree(CSTypeNode *t,char x){//根据结点x,输出其父节点与子结点

CSTypeNode *p;

if(t==NULL) return ;

if(flag==1) return ;

p=t->firstchild;

if(p!=NULL &&flag!=2){ //父结点已找到,就不用再找

do{//寻找其父结点

if(p->data==x){

flag=2;//设置父结点已找到标志

printf("此结点%c的父结点为%c\n",x,t->data);

break;

}

p=p->nextsibling;

}while(p!=NULL);

}

if(t->data==x){//找到此结点否

flag=1;//是,设置已找到标志

if(t==tp)

printf("此结点%c为根结点\n",x);

if(t->firstchild==NULL)

printf("此结点%c无子结点\n",x);

else {

printf("此结点%c的子结点为",x);

p=t->firstchild;

do{//循环获取其子结点

printf("%c ",p->data);

p=p->nextsibling;

}while(p!=NULL);

printf("\n");

}

}

GetTree(t->nextsibling,x);//递归寻找右子结点

GetTree(t->firstchild,x); //递归寻找左子结点

return ;

}

void Tree2Link(CSTypeNode *t,char x)

{

flag=0;

tp=t;

GetTree(t,x);

if(flag==0)

printf("无此结点%c数据\n",x);

printf("\n");

}

int main(int argc, char* argv[])

{   printf("学号姓名  树的孩子兄弟结点表示\n");

CSTypeNode ta,tb,tc,td,te,tf,tg,ti,th;

ta.data=‘A‘;tb.data=‘B‘;

tc.data=‘C‘;td.data=‘D‘;

te.data=‘E‘;tf.data=‘F‘;

tg.data=‘G‘;th.data=‘H‘;

ti.data=‘I‘;tj.data=‘J‘;

ta.firstchild=&tb;ta.nextsibling=NULL;

tb.firstchild=&td;tb.nextsibling=&tc;

tc.firstchild=&th;tc.nextsibling=NULL;

td.firstchild=NULL;td.nextsibling=&tg;

te.firstchild=NULL;te.nextsibling=&tf;

tf.firstchild=NULL;tf.nextsibling=&ti;

tg.firstchild=&te;tg.nextsibling=NULL;

th.firstchild=NULL;th.nextsibling=&tJ;

ti.firstchild=NULL;ti.nextsibling=NULL;

tj.firstchild=NULL;ti.nextsibling=NULL;

char c[20];

while(true){

printf("输入结点数据:");

scanf("%s",c);

if(c[0]==‘0‘) break;

//if(c==‘\n‘) continue;

Tree2Link(&ta,c[0]);

}

return 0;

}

时间: 2024-08-25 14:48:07

今日数构的相关文章

es6学习 -- 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样. let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌套数组进行解构的例子. 我认为

参数和函数形参 到 解构和不完全解构

<span style="border-left:red;">函数的参数和形参</span> 声明一个有三个形参的函数 where function where(a,b,c){ ... } 而我们调用的时候执行 where(1,2,3,4,5){....} 此时参数 1.2.3会分别赋值给 a.b.c,参数4.5则不会赋值给任何形参.但是我们已让可以通过 隐式参数 arguments 去得到他们. <span style="border-left

HDU 6206 Apple ( 高精度 &amp;&amp; 计算几何 &amp;&amp; 三点构圆求圆心半径 )

题意 : 给出四个点,问你第四个点是否在前三个点构成的圆内,若在圆外输出"Accepted",否则输出"Rejected",题目保证前三个点不在一条直线上. 分析 : 简单的计算几何问题,如果能够知道圆心和半径(Radius)以及第四个点和圆心的距离(Distance),我们就能够判断第四个点是否在圆外,例如Distance > Radius则在圆外.三点构圆 的圆心和半径是能够推导出公式的 (参考==> http://blog.csdn.net/dea

ECMAscript6新特性之解构赋值

在以前,我们要对变量赋值,只能直接指定值.比如:var a = 1;var b = 2;但是发现这种写法写起来有点麻烦,一点都不简洁,而在ECMAScript6中引入了一种新的概念,那就是"解构",这种赋值语句极为简洁,比传统的属性访问方法更为清晰.那什么是解构呢?按照一定的模式,允许从数组或者对象中获取到值,并且对其变量进行赋值.称为"解构". 看到上图了吧,解构是不是很简洁.其实解构不单用于数组.对象,只要内部具有iterator接口,就都可以使用解构来给变量赋

解构赋值

1.数组解构 let [a,b,c,d] = ['aa','bb',77,88] 嵌套数组解构 let [a,b,[c,d],e] = ['aa','bb',[33,44],55] 空缺变量 let [a,b,,e] = ['aa','bb',[33,44],55] 多余变量 let [a,b,,e,f] = ['aa','bb',[33,44],55] 默认值 let [a,b,,e,f='hello'] = ['aa','bb',[33,44],55] 2.对象解构 let obj = ne

redis源码分析4---结构体---跳跃表

redis源码分析4---结构体---跳跃表 跳跃表是一种有序的数据结构,他通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的: 跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点.性能上和平衡树媲美,因为事先简单,常用来代替平衡树. 在redis中,只在两个地方使用了跳跃表,一个是实现有序集合键,另一个是在集群节点中用作内部数据结构. 1 跳跃表节点 1.1 层 层的数量越多,访问其他节点的速度越快: 1.2 前进指针 遍历举例

redis源码分析3---结构体---字典

redis源码分析3---结构体---字典 字典,简单来说就是一种用于保存键值对的抽象数据结构: 注意,字典中每个键都是独一无二的:在redis中,内部的redis的数据库就是使用字典作为底层实现的: 1 字典的实现 在redis中,字典是使用哈希表作为底层实现的,一个hash表里面可以有多个hash表节点,而每个hash表节点就保存了字典中的一个键值对: hash表定义 table属性是一个数组,数组中的每个元素都是一个指向dictEntry结构的指针,每个dictEntry结构保存着一个键值

ES6(二)解构赋值+字符串的扩展

详解一下之前的解构赋值 ①解构赋值中的"..." let [a,...b]= [1]; b // [] ...代表变量b去匹配剩余的所有元素返回一个数组 ,匹配不到时返回[] //注意:"...b"只能放在最后 ②解构赋值的等号两边的数据类型必须一样 即: let [] = [] 或者 let {} = {} 但是:Set结构也允许使用数组进行解构赋值 let [a,b]= new Set([1,2,3,4]) a //1 b //2 技巧: 如果你不确定该结构是否

对?O?p?e?n?C?V?直?方?图?的?数?据?结?构?C?v?H?i?s?t?o?g?r?a?m?的?理?解

前几天被OpenCV的直方图的数据结构CvHistogram弄得很纠结.上网一搜,也没什么相关的资料.现在有点头绪了,就写点东西,让后面的人好走一些吧. 先来看看CvHistogram的定义: typedef struct CvHistogram { int     type; CvArr*  bins; float   thresh[CV_MAX_DIM][2];  /* For uniform histograms.                      */ float** thres