树的双亲表示法(数组实现) -A

简述说明树结点: 数据域 & 双亲域 & id标识.树结点的id标识就是树结点的存储下标.修改数据域数据类型则需要修改部分代码使兼容.树结点按层序序列存储树结点从下标1开始存储, 即下标0不做存储.存储结构c语言实现代码main.c#include <stdio.h>#include <stdlib.h>#include "ParentTree.h"void PrintMenu(void);void ClearStdin(vo
摘要由CSDN通过智能技术生成

简述说明

其它实现方法:
1.树的双亲表示法(数组实现) -B
2.树的双亲表示法(链表实现) -A
3.树的双亲表示法(链表实现) -B

  • 树结点: 数据域 & 双亲域 & id标识.
  • 树结点的id标识就是树结点的存储下标.
  • 修改数据域数据类型则需要修改部分代码使兼容.
  • 树结点按层序序列存储
  • 树结点从下标1开始存储, 即下标0不做存储.

CreateTree_P函数说明

  • 输入字符串生成与其对应的树 (例如 A BC D EF GHI J ^ ^ ^ ^ ^)
    A的孩子BC, 则 A BC
    B的孩子D, 则 A BC D
    C的孩子EF, 则 A BC D EF
    D的孩子GHI, 则 A BC D EF GHI
    E的孩子J, 则 A BC D EF GHI J
    FGHIJ都没有孩子, 所以 A BC D EF GHI J ^ ^ ^ ^ ^
    在这里插入图片描述

存储结构

在这里插入图片描述

c语言实现代码

  • main.c
#include <stdio.h>
#include <stdlib.h>
#include "ParentTree.h"

/*********************************/
#define STR_MAXSIZE 1024

#if _WIN32
    #define CLEARSCREEN "cls"
#elif __linux__
    #define CLEARSCREEN "clear"
#endif
/*********************************/



/*=============== 树的双亲存储结构函数测试列表 ===============*/
void PrintMenu(void);
void ClearStdin(void);
void Pause(void);

void InitTree_Test(PTree *T);
void CreateTree_Test(PTree *T);
void PrintTree_Test(const PTree *T);
void ClearTree_Test(PTree *T);
void DestroyTree_Test(PTree *T);
void TreeEmpty_Test(const PTree *T);
void TreeDegree_Test(const PTree *T);
void TreeDepth_Test(const PTree *T);
void RootValue_Test(const PTree *T);
void Value_Test(PTree *T);

void Order_Test(const PTree *T);
void Assign_Data_Test(PTree *T);
void Assign_Id_Test(PTree *T);
void ChildValue_Data_Test(PTree *T);
void ChildValue_Id_Test(PTree *T);
void Sibling_Data_Test(PTree *T);
void Sibling_Id_Test(PTree *T);
void ChildCount_Data_Test(const PTree *T);
void ChildCount_Id_Test(const PTree *T);
void ChildSeat_Data_Test(PTree *T);
void ChildSeat_Id_Test(PTree *T);

void InsertChild_Data_Test(PTree *T);
void InsertChild_Id_Test(PTree *T);
void InsertTree_Data_Test(PTree *T);
void InsertTree_Id_Test(PTree *T);
void DeleteTree_Data_Test(PTree *T);
void DeleteTree_Id_Test(PTree *T);
/*====================================================*/



void PrintMenu(void) {
   
    system(CLEARSCREEN);
    puts("1.InitTree \n");
    puts("2.CreateTree \n");
    puts("3.PrintTree \n");
    puts("4.ClearTree \n");
    puts("5.DestroyTree \n");
    puts("6.TreeEmpty \n");
    puts("7.TreeDegree \n");
    puts("8.TreeDepth \n");
    puts("9.RootValue \n");
    puts("10.Value \n");

    puts("11.Order \n");
    puts("12.Assign_Data \n");
    puts("13.Assign_Id \n");
    puts("14.ChildValue_Data \n");
    puts("15.ChildValue_Id \n");
    puts("16.Sibling_Data \n");
    puts("17.Sibling_Id \n");
    puts("18.ChildCount_Data \n");
    puts("19.ChildCount_Id \n");
    puts("20.ChildSeat_Data \n");
    puts("21.ChildSeat_Id \n");

    puts("22.InsertChild_Data \n");
    puts("23.InsertChild_Id \n");
    puts("24.InsertTree_Data \n");
    puts("25.InsertTree_Id \n");
    puts("26.DeleteTree_Data \n");
    puts("27.DeleteTree_Id \n");

    puts("0.Exit \n");
    printf("Input: ");
}

void ClearStdin(void) {
   
    char ch;
    while(ch=getchar(), ch!='\n');
}

void Pause(void) {
   
    puts("Press enter to continue.");
    ClearStdin();
}

void InitTree_Test(PTree *T) {
   
    system(CLEARSCREEN);

    Size_T n;
    printf("Input n: ");
    scanf("%u", &n);
    ClearStdin();

    if(InitTree_P(T, n))
        puts("Error. ");
    else
        puts("Ok. ");

    Pause();
}

void CreateTree_Test(PTree *T) {
   
    system(CLEARSCREEN);

    TElemType_P ch, str[STR_MAXSIZE];
    printf("Input str: ");
    for(Size_T i=0; i<STR_MAXSIZE; i++) {
   
        if(ch=getchar(), ch=='\n') {
   
            str[i] = '\0';
            break;
        }
        str[i] = ch;
    }
    str[STR_MAXSIZE-1] = '\0';

    if(CreateTree_P(T, str))
        puts("Error. ");
    else
        puts("Ok. ");

    Pause();
}

void PrintTree_Test(const PTree *T) {
   
    system(CLEARSCREEN);
    PrintTree_P(T);
    Pause();
}

void ClearTree_Test(PTree *T) {
   
    ClearTree_P(T);
}

void DestroyTree_Test(PTree *T) {
   
    DestroyTree_P(T);
}

void TreeEmpty_Test(const PTree *T) {
   
    system(CLEARSCREEN);
    if(TreeEmpty_P(T))
        puts("The tree is empty. ");
    else
        puts("The tree is not empty. ");
    Pause();
}

void TreeDegree_Test(const PTree *T) {
   
    system(CLEARSCREEN);
    printf("Degree: %u \n", TreeDegree_P(T));
    Pause();
}

void TreeDepth_Test(const PTree *T) {
   
    system(CLEARSCREEN);
    printf("Depth: %u \n", TreeDepth_P(T));
    Pause();
}

void RootValue_Test(const PTree *T) {
   
    system(CLEARSCREEN);
    printf("RootValue: %c \n", RootValue_P(T));
    Pause();
}

void Value_Test(PTree *T) {
   
    system(CLEARSCREEN);

    PTNode *p;
    Size_T k;
    printf("Input k: ");
    scanf("%u", &k);
    ClearStdin();

    if(p = Value_P(T, k))
        printf("T->nodes[%u] = %c \n", k, p->data);
    else
        printf("T->nodes[%u] = NULL \n", k);
    
    Pause();
}

void Order_Test(const PTree *T) {
   
    system(CLEARSCREEN);

    TElemType_P ch;
    printf("Input ch: ");
    ch = getchar();
    ClearStdin();
    printf("T->nodes[%u] = %c \n", Order_P(T, ch), ch);

    Pause();
}

void Assign_Data_Test(PTree *T) {
   
    system(CLEARSCREEN);

    TElemType_P ch, value;
    printf("Input ch & value: ");
    scanf("%c %c", &ch, &value);
    ClearStdin();

    if(Assign_Data_P(T, ch, value))
        puts("Error. ");
    else
        puts("Ok. ");

    Pause();
}

void Assign_Id_Test(PTree *T) {
   
    system(CLEARSCREEN);

    Id_P id;
    TElemType_P value;
    printf<
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值