-
1.perface:
如下树结构:
若用树的双亲表示法,结果是:树的双亲表示:
0 1 A 2 B 1 3 C 1 4 D 2 5 E 2 6 F 2 7 G 3 8 H 5 9 I 5 2.codes://树的双亲表示法存储:
..h文件:
#ifndef TREE_C_H_ #define TREE_C_H_ /** * * **/ //树的存储的、结构: #define M 10 typedef struct { char data; //字符数据 int parent; //父节点 }NODE; NODE pt[M+1]; //节点数组表示树 ///////////////////////// typedef struct tnode{ int child; struct tnode *next ; //指向具体的结构的指针 }TNODE; typedef struct tablenode{ char data; TNODE *fchild;//指向第一个孩子的节点 }TD; TD ct[M+1]; //双亲表示法 void parent_tree(char treedata[M],int m); //孩子表示方法 void child_tree(char treedata[M],int m); #endif /*TREE_C_H_*/
.c文件:
/** * 双亲的表示法 * @m 树中的数据 * */ void parent_tree(char treedata[M], int m) { //1.去除数据赋值 char c; int i; int j; //初始化的头结点: pt[0].parent=-1; pt[0].data=' '; for (i = 0; i <=m; ++i) { pt[i].data=treedata[i]; printf("请输入%c的父节点,根的父节点请输入空格\n", pt[i].data); //显出stdout fflush(stdout); c=getchar(); getchar();//
for (j = 0; j < i; ++j) { if (pt[j].data==c) { pt[i].parent=j; } } } //输出 printf("树的双亲表示法:\n"); printf("下表 data parent\n"); for (i = 0; i <m; ++i) { printf("data=%d,parant=%d", pt[i].data, pt[i].parent); //打印出对应的ACII printf("\n"); } }
3.refence:
看一下存储的角标确实符合,注意,左边打印的是字符编码。