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:
看一下存储的角标确实符合,注意,左边打印的是字符编码。