根据给定的文件信息,我们可以总结出以下关于“基于二叉排序树的通讯录”的IT知识点: ### 1. **二叉排序树(Binary Search Tree)的概念与特性** - **概念**:二叉排序树是一种特殊的二叉树,其中每个节点包含一个关键字,左子树中的所有节点的关键字均小于其父节点的关键字,右子树中的所有节点的关键字均大于其父节点的关键字。 - **特性**: - 快速查找:由于二叉排序树的特性,可以迅速定位到目标节点或确定目标不存在于树中。 - 插入和删除操作:通过比较新插入节点或待删除节点的关键字与树中已有节点的关键字,可以在O(log n)的时间复杂度内完成操作。 - **非递归先中后序遍历**:这是一种遍历二叉树的方法,其中先中序遍历是指按照左根右的顺序访问树中的节点,而后序遍历则是按照左右根的顺序访问。非递归实现通常使用栈来辅助实现。 ### 2. **数据结构作业示例:基于二叉排序树的通讯录系统** - **结构设计**:该通讯录系统使用二叉排序树作为主要的数据结构,每个节点存储一个`student`类型的结构体,其中包含姓名、学号、生日和电话号码等信息。 - **功能实现**: - 初始化数据:预先定义了一些学生的数据,并将其存储在数组中,随后将数组中的第一个元素设置为二叉排序树的根节点。 - 插入学生信息:通过比较新学生学号与树中已有学生学号,将新学生信息正确地插入到树中相应的位置,保证了二叉排序树的特性。 - 查找学生信息:通过递归方式在树中查找指定名字的学生信息,一旦找到,即输出该学生的所有详细信息。 - 更改和删除学生信息:虽然代码片段中未完全展示,但理论上,更改和删除操作也是基于二叉排序树的特性进行的,需要确保操作后的树仍满足二叉排序树的性质。 ### 3. **代码分析** - 使用了标准C语言库函数,如`stdio.h`、`stdlib.h`和`string.h`,分别用于输入输出、内存分配和字符串操作等功能。 - 定义了`student`和`tree`两个结构体类型,前者存储学生信息,后者则用于构建二叉排序树,其中`people`字段指向`student`类型的指针,`left`和`right`字段指向子树的根节点。 - `initdata()`函数用于初始化通讯录数据,`insert()`函数实现了向二叉排序树中插入新学生信息的功能,`find()`函数用于在树中查找特定的学生信息。 这个基于二叉排序树的通讯录项目是一个典型的数据结构应用案例,它不仅展示了二叉排序树的基本操作,还涉及到数据结构的设计、算法的实现以及C语言编程技术的应用。
#include"stdlib.h"
#include"string.h"
/****************************************************
copyright: self_chou
Filename: carpark.c
AUthour : self_chou Version: 1.0 Date: 2012.07
Description: 基于二叉排序树写的通讯录
Function List:
initdata() 初始化内置数据
insert() 添加联系人
find() 查找联系人
change() 修改联系人信息
delete() 删除联系人
destory() 释放空间
*******************************************************/
typedef struct student
{
char name[10];
char sno[10];
char bir[10];
char tel[10];
}student;
student class[50];
int current = 0;
int flag; //查找结果标记
typedef struct tree
struct student *people;
struct tree *left;
struct tree *right;
}tree;
tree *root = NULL;
void initdata() //内置的联系人
{
strcpy( class[current].name,"赵一");
strcpy( class[current].bir,"19910214");
strcpy( class[current].tel,"12345678");
strcpy( class[current].sno,"20125");
current++;
strcpy( class[current].name,"钱二");
strcpy( class[current].bir,"19900304");
strcpy( class[current].tel,"09876543");
strcpy( class[current].sno,"20126");
current++;
strcpy( class[current].name,"孙三");
strcpy( class[current].bir,"19910708");
strcpy( class[current].tel,"56780934");
strcpy( class[current].sno,"20127");
current++;
strcpy( class[current].name,"李四");
strcpy( class[current].bir,"19890506");
strcpy( class[current].tel,"09874532");
strcpy( class[current].sno,"20122");
root = (tree *)malloc(sizeof(tree));
剩余17页未读,继续阅读
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助