Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2164440
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: C/C++

2011-06-27 09:25:53

【问题描述】

   在高校中,为了丰富学生的业余生活,在学校的帮助下,会成立许多社团,少则几个,多则几十个。为了有效的管理这些社团,要求编写程序实现以下功能:

  1. 社团招收新成员
  2. 修改社团相应信息
  3. 老成员离开社团
  4. 查询社团情况
  5. 统计社团成员数

【问题分析】

    社团管理部门、社团和社团成员之间构成了完整的一棵树,如图一。因此,可以把它作为树的问题来解决。由于树结构比较复杂,不利于求解,先把树转换成二叉树。因此,高校社团管理就转换为对二叉树操作的问题

    在这棵二叉树中,结点类型是不同的,有社团结点,有成员结点。为了便于操作,特设置一个标识域type用于区分结点类型。

   二叉树选用二叉链表作为存储结构。 

                          (a) 树

      (b)二叉树

         图1 社团和成员构成的树

【问题实现】

1.数据结构

(a)定义结点[封装数据信息]

typedef struct Info{

    int type;              /*类型,0为社团,1为社团成员 */

    char tname[20];        /*名称或姓名*/

    char data[11];          /*成立日期或出生日期*/

     char phone[11];        /*联系电话*/

     char duty[10];          /* 职务*/

}datatype;

(b)描述二叉树的二叉链表存储结构

typedef struct bitnode

{  

   datatype data;                    /*数据域*/

   struct bitnode *lchild,*rchild;    /*左右孩子指针*/ 

}BiTNode,*PBiTNode,*BiTree;

2.操作实现

(1)根据类型和名称查找结点

 

 

 

 

 

 

 

 

 

 

 

 

参考资料

1.《数据结构实例教程》  杨晓光

阅读(771) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~