C语言树的编程程序
来源:互联网 发布:激光发射器软件 编辑:程序博客网 时间:2024/06/01 07:32
main主函数:
#include <stdio.h>#include "tree.h"int main(){Tree *tree = Tree_Create();if (tree == NULL)return -1;Tree_Insert(tree, 'A', -1);Tree_Insert(tree, 'B', 0);Tree_Insert(tree, 'C', 0);Tree_Insert(tree, 'D', 0);Tree_Insert(tree, 'E', 1);Tree_Insert(tree, 'F', 1);Tree_Insert(tree, 'G', 2);Tree_Insert(tree, 'H', 3);Tree_Insert(tree, 'I', 3);Tree_Insert(tree, 'J', 3);Display(tree);return 0;}
树的.c文件
#include "tree.h"#include <stdlib.h>#include <stdio.h>#include <assert.h>Tree* Tree_Create(){// 创建树的结点Tree* tree = (Tree*)malloc(sizeof(Tree)/sizeof(char));assert(tree);// 对树的结点参数进行初始化tree->len = 0;// 创建树的链表的头节点tree->head = (TreeNode*)malloc(sizeof(TreeNode)/sizeof(char));assert(tree->head);tree->head->next = NULL;tree->head->parent = NULL;tree->head->childList = NULL;return tree;}/*初始化新结点参数:data = datalen = 0;next = NULLchildList:新建子节点链表的头节点,初始化相应参数parent: 找到双亲结点,如果找到:在双亲结点的子节点链表中新建子节点子节点参数:next = null childNode = node; 将新的子结点尾插进双亲结点的子结点链表当中双亲结点的度 要 +1*/int Tree_Insert(Tree* tree, TreeData data, int pos){assert(tree != NULL && pos < tree->len);// 新建树结点TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode)/sizeof(char));assert(node);node->data = data;node->len = 0;node->next = NULL;node->childList = (ChildNode*)malloc(sizeof(ChildNode)/sizeof(char));assert(node->childList);node->childList->next = NULL;node->childList->childNode = NULL;// 找双亲结点TreeNode* parent = tree->head->next; // 树链表的第0个结点int i;for (i = 0; i < pos; i++){parent = parent->next;}// 如果双亲结点存在,就加入到双亲结点的子结点链表中if (parent != NULL){// 创建一个子结点ChildNode* childNode = (ChildNode*)malloc(sizeof(ChildNode)/sizeof(char));assert(childNode);childNode->next = NULL;childNode->childNode = node;// 将子结点插入到parent的childList中ChildNode* tmp = parent->childList; // 子结点链表的头节点while(tmp->next)tmp = tmp->next;tmp->next = childNode;parent->len++;}// 将新结点插入到树的链表中TreeNode* tmp = tree->head;while(tmp->next)tmp = tmp->next;tmp->next = node;tree->len++;return 1;}void r_display(TreeNode *node ,int gap){if(node == NULL)return ;int i = 0;for(i = 0;i < gap;i++){printf("%c",'-');}printf("%c\n",node->data);ChildNode *child = node->childList->next;while(child){r_display(child->childNode,gap+2);child = child -> next;}}void Display(Tree *tree){assert(tree);r_display(tree->head->next,0);}
树的.h文件
#ifndef __TREE_H__#define __TREE_H__struct _treeNode; // 类型声明typedef char TreeData;// 孩子结点类型typedef struct _childNode{struct _treeNode *childNode; // 指向孩子结点的指针struct _childNode *next;}ChildNode;typedef struct _treeNode{TreeData data;struct _treeNode *parent; // 指向双亲结点struct _treeNode *next; // 指向链表的下一个结点struct _childNode* childList; // 指向孩子结点链表头节点的指针int len; // 孩子结点的个数:度}TreeNode;typedef struct _tree{TreeNode *head; // 指向树的链表的头节点int len; // 树中结点的总个数}Tree;// 创建通用树Tree* Tree_Create();// 树节点插入:pos指双亲结点在链表中的位置,链接中的结点是从0开始// 也就是说 根节点的位置 是 0int Tree_Insert(Tree* tree, TreeData data, int pos);void Display(Tree *tree);void r_display(TreeNode *node ,int gap);#endif // __TREE_H__
阅读全文
0 0
- C语言树的编程程序
- C语言编程-----程序的内存布局
- C语言编程-----程序的内存布局
- 【c】C语言编程写的一个http下载程序
- C语言编程规范(1)-写程序的总体风格
- Matlab与C语言程序的应用编程接口
- Matlab与C语言程序的应用编程接口
- C语言编程写的一个http下载程序
- Matlab与C语言程序的应用编程接口
- C语言编程程序的内存如何布局
- C语言编程程序的内存如何布局
- 【转】C语言编程程序的内存如何布局
- C语言编程程序的内存如何布局
- 【窗口编程】一个简单的C语言窗口程序
- C语言编程程序的内存如何布局
- C语言编程程序的内存如何布局
- C语言编程基础,手机购物程序的设计
- c语言的程序
- 玲珑 1149
- vb.net 教程 12-2 HtmlDocument类 4
- 关于 hashCode() 你需要了解的 3 件事
- java多线程
- 科学计数法
- C语言树的编程程序
- window对象方法moveBy();moveTo()效果不显示
- 生成删除某个数据库中的所有表外键关联语句
- 笔试题:发奖金(搜狐2016研发笔试题)
- 第二篇 Java核心技术
- 覆写ProgressDialog的setMessage方法无效的问题
- 20170805Windows12_3_虚拟内存页面区块/内存信息
- JDK1.8新特性
- Graham凸包算法简介