1. 实验目的及要求

目的:通过设计一个《个人电话号码查询系统》,进一步熟悉一些二叉树的概念、以及基本知识和技能,利用所学的基本知识和技能解决简单的面向对象的程序设计问题。实现根据用户输入的信息进行快速的查询。

要求: 实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等),对数据进行二叉排序并实现平衡二叉树,对数据进行快速查询。编程完成通讯录的一般性管理工作,如通讯录中记录的增加、修改、查找、删除、输出等功能。每个记录包含姓名、电话号码、住址等个人基本信息。

(1)在外存上,用文件保存电话号码信息;

(2)在内存中,设计数据结构存储电话号码信息;

(3)提供查询功能,如根据姓名实现快速查询;

(4)提供其他维护功能,例如插入、删除、修改等。

  1. 实验步骤

1.实验问题分析

需要用到数据结构课上学到的平衡二叉树的知识,实现删除和插入,增加功能。理解关于二叉树的相关的基本算法。将输入的信息保存入文件和从文件输出。

2.实验概要分析

1.用结构体存储联系人的信息;

  2.初始化二叉树;

3.记录结点的高度,并解决结点不平衡问题;

4.实现增加联系人,查询功能;

5.主函数。

  1. 实验内容

代码的实现如下:

#include <stdio.h>#include <stdlib.h>struct stu_num{char stu_name[30];//姓名int num;//电话int number;//编号};//定义一个二叉树的结构体typedef struct person_list{struct person_list *lchild;//左孩子struct person_list *rchild;//右孩子int height;struct stu_num perfor_info;//结构体类型的数据}person_node;//初始化二叉树person_node *request_person_node(const struct stu_num *value){person_node *new_node;new_node = malloc(sizeof(person_node));if (new_node == NULL){perror("未申请到二叉树节点\n");return NULL;}if (value != NULL){new_node->perfor_info = *value;new_node->lchild = NULL;new_node->rchild = NULL;}return new_node;}//记录节点的高度#define MAX(A, B) ((A)>(B)?(A):(B))int get_tree_height(person_node *root){if(root == NULL)return 0;return MAX(get_tree_height(root->lchild), get_tree_height(root->rchild))+1;}//解决左左不平衡person_node *tree_node_rotate_right(person_node *root){person_node *tmp;tmp = root->lchild;root->lchild = tmp->rchild;tmp->rchild = root;tmp->height = get_tree_height(tmp);root->height = get_tree_height(root);return tmp;//返回新的root的地址给调用这个函数的用户,用于更新新的root地址}//解决右右不平衡person_node *tree_node_rotate_left(person_node *root){person_node *tmp;tmp = root->rchild;root->rchild = tmp->lchild;tmp->lchild = root;tmp->height = get_tree_height(tmp);root->height = get_tree_height(root);return tmp;}//解决左右不平衡person_node *tree_node_rotate_left_right(person_node *root){root->lchild = tree_node_rotate_left(root->lchild);root = tree_node_rotate_right(root);return root;}//解决右左不平衡person_node *tree_node_rotate_right_left(person_node *root){root->rchild = tree_node_rotate_right(root->rchild);root = tree_node_rotate_left(root);return root;}//增加插入个人电话信息person_node *insert_node_to_tree(person_node *root,person_node *new_node){if (root == NULL)return new_node;if(root ->perfor_info.number > new_node->perfor_info.number){root->lchild = insert_node_to_tree(root->lchild,new_node);}else{root->rchild = insert_node_to_tree(root->rchild,new_node);}if(get_tree_height(root->lchild)-get_tree_height(root->rchild) == 2)//左不平衡{//如果插入的数据比跟的左树节点的数据要小,那他肯定是插入到root->lchild的左边去,出现了左左不平衡if(new_node->perfor_info.number < root->lchild->perfor_info.number)//左左不平衡{root = tree_node_rotate_right(root);}else//否则则是插入到root->lchild的右边去,出现了左右不平衡{root = tree_node_rotate_left_right(root);}}else if(get_tree_height(root->rchild)-get_tree_height(root->lchild) == 2)//右不平衡{if( new_node->perfor_info.number >= root->rchild->perfor_info.number)//右右不平衡{printf("出现右不平衡\n");root = tree_node_rotate_left(root);}else//右左不平衡{root = tree_node_rotate_right_left(root);}}root->height = get_tree_height(root);return root;}//搜索查询个人电话信息person_node *find_tree_node(person_node *root,int input_value){if (root == NULL)return NULL;if (root->perfor_info.number > input_value){return find_tree_node(root ->lchild,input_value);}else if (root->perfor_info.number < input_value){return find_tree_node(root ->rchild,input_value);}return root;}//中序遍历打印所有电话信息void tree_for_each(person_node *root){if (root == NULL){return;}tree_for_each(root->lchild);printf("编号:%d,名字:%s,电话号码:%d\n",root->perfor_info.number,root->perfor_info.stu_name,root->perfor_info.num);tree_for_each(root->rchild);}int main(void){int choose,input_value,a;struct stu_num input_person_data;//定义一个结构体类型的数据用来缓存联系人数据person_node *root = NULL,*new_node,*find_node;//初始化一个节点root为空while(1){printf("****输入数字选择相应的指令****\n");printf("****1.添加联系人**************\n");printf("****2.查找联系人**************\n");printf("****3.输出所有联系人**********\n");printf("****4.退出本系统**************\n");printf("******************************\n");scanf("%d",&choose);switch(choose){case 1:printf("请输入联系人编号:\n");scanf("%d",&input_person_data.number);printf("请输入联系人的姓名:\n");scanf("%s",input_person_data.stu_name);printf("请输入联系人的电话号码:\n");scanf("%d",&input_person_data.num);new_node = request_person_node(&input_person_data);root = insert_node_to_tree(root,new_node);break;case 2:printf("请输入联系人的编号查询信息\n");scanf("%d",&input_value);find_node = find_tree_node(root,input_value);if (find_node == NULL){printf("找不到该联系人的信息\n");break;}printf("编号:%d,   姓名:%s,  电话号码:%d\n",find_node->perfor_info.number,find_node->perfor_info.stu_name,find_node->perfor_info.num);break;case 3:printf("所有联系人的信息为:\n");tree_for_each(root);break;case 4:goto log_out;}}return 0;log_out:return 0;}

4.实验结果

5. 实验总结分析

通过这次实验,体会到要掌握以下几点内容:

1.要学会先做好模块,从大到小,进行细化。
        2.编写好函数,并进行测试与调试。

3.写程序时要善于使用库函数,可以提高效率。

4.定义函数时,应选好参数的个数和数据类型。

但仍需进一步的学习二叉树地相关知识,才能够更加熟练的运用数据结构(C++)来设计系统。

数据结构个人电话号码查询系统实验报告相关推荐

  1. c语言飞机票实验报告格式,c语言航班信息查询系统实验报告

    <c语言航班信息查询系统实验报告>由会员分享,可在线阅读,更多相关<c语言航班信息查询系统实验报告(21页珍藏版)>请在人人文库网上搜索. 1.希昌丸會软件学院大作业任务书题目 ...

  2. c语言课设航班信息管理软件管理系统,c语言航班信息查询系统实验报告.doc

    c语言航班信息查询系统实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  3. c语言程序设计航空查询系统,c语言航班信息查询系统实验报告.doc

    c语言航班信息查询系统实验报告 PAGE 13 - 软件学院大作业任务书 题 目:航班信息查询系统 专 业: 班 级: 姓 名: 学 号: 完成人数: 起讫日期: 任课教师: 职称: 讲师 部分管主任 ...

  4. 【数据结构课程设计报告】电话号码查询系统(Java实现)

    数据结构课程设计报告 电话号码查询系统 数据结构课程设计报告 一.需求分析 二.系统功能划分及设计 1.存储结构设计 2.系统的功能架构设计 3.模块设计 3.代码实现 一.需求分析 问题描述:路径规 ...

  5. 电话号码查询系统(数据结构之哈希表)

    哈希表 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构.通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数. 1. ...

  6. 输入手机号查询信息C语言,简单个人电话号码查询系统.doc

    课程设计任务书 2011-2012学年第1学期 电子与信息工程系 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 简单个人电话号码查询系统 完成期限:自2012 年 1月2日至2012 年 ...

  7. 任务19 简单个人电话号码查询系统

    系列文章 任务19 简单个人电话号码查询系统 问题描述 人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询 ...

  8. 嵌入式系统实验 构建嵌入式Linux系统,《嵌入式系统与开发》构建嵌入式Linux系统-实验报告.doc...

    <嵌入式系统与开发>构建嵌入式Linux系统-实验报告 <嵌入式数据库sqlite移植及使用> 实验报告 学生姓名: 陈 彤 学 号: 1座机电话号码 专业班级: 130044 ...

  9. C语言电话号码查询系统[2023-01-16]

    C语言电话号码查询系统[2023-01-16] 一.课程设计(论文)题目 电话号码查询系统 说明: 设计哈希表,实现电话号码查询系统. 二.本次课程设计(论文)应达到的目的 C语言.面向对象程序设计. ...

最新文章

  1. AME_Oracle自带AME审批链详解AME Standard Handler(概念)
  2. div横排 html_html中两个DIV怎么横排靠齐?
  3. 用 C 语言开发一门编程语言 — 抽象语法树
  4. 用python画图代码简单-【Matplotlib】利用Python进行绘图
  5. 深度解析Java可变参数类型以及与数组的区别
  6. USTC English Club Note20171013(5)
  7. 用于J2EE开发的Cloud IDE
  8. cocos2d 很水很水的看法
  9. 飞信2008内测版下载
  10. ArcFace 论文阅读及 pytorch 实现
  11. 利用base64展示图片
  12. 姓周取名:周姓漂亮有涵养的女孩名字
  13. Oracle连接pg,pg连接oracle.sql
  14. GB/T28181-2022图像抓拍规范解读及技术实现
  15. Angular导出功能(excel导出功能、文件数据流导出功能、图片的下载导出功能)
  16. 怎样才能让青少年培养起阅读习惯?听听猿辅导这四位嘉宾怎么说
  17. 盲盒系统的玩法运营如何盈利
  18. Docker学习三 Docker安装Mysql
  19. js中valueOf方法的使用
  20. TPM介绍及工作原理

热门文章

  1. 【vue】mint-ui中navbar下划线不显示的问题
  2. Opencv 实战五 图像拼接
  3. roce流量抓包 linux,roce性能测试方法
  4. 福特汉姆计算机专业,福特汉姆大学计算机
  5. 大数据分析师 VS. 大数据工程师
  6. 基于深度神经网络实现的kws系统
  7. mac 解压rar文件
  8. MP地面站二次开发教程(四)地面站优化及其功能测试
  9. 织梦后台编写网站的操作步骤
  10. 穿越(pass through)