资源简介
该程序用c++语言编写,主要用到数据结构中的二叉树,做的职工管理系统,主要用于其创建,查找,删除,添加等
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#define LH 1//左高
#define EH 0//等高
#define RH -1//右高
#define FALSE 0
#define TRUE 1
#define OK 1
#define ERROR 0
#define MAXSIZE 20
char filename[30];
FILE *fp;
typedef struct{
int number;
char name[10];
float wage;
int age;
}worker;
typedef struct tree
{
worker data;
int bf;//节点平衡因子
struct tree *rchild*lchild;
}node*bitree;
int insert(bitree &tworker xbool &taller);
int input()
{
int jn=0;
worker wor[MAXSIZE];
printf(“输入文件名\n“);
scanf(“%s“filename);
if((fp=fopen(“filename““w+“))==NULL)
{
printf(“the file error!\n“);
exit(0);
}
printf(“输入要录入的职工个数\n“);
scanf(“%d“&n);
printf(“输入%d个职工信息 职工号 姓名,工资,年龄 \n“n);
for(j=0;j {
scanf(“%d%s%f%d“&wor[j].numberwor[j].name&wor[j].wage&wor[j].age);
getchar();
}
for(j=0;j fprintf(fp“%-3d %-10s %-8f %-5d\n“wor[j].numberwor[j].namewor[j].wagewor[j].age);
fclose(fp);
return n;
}
void creat(int nbitree &t)
{//构建平衡排序树
int i;
bool taller=FALSE;
t=NULL;
worker wor;
if(n==0)
exit(0);
if((fp=fopen(“filename““r“))==NULL)
{
printf(“the file error\n“);
exit(0);
}
fscanf(fp“%d%s%f%d“&wor.numberwor.name&wor.wage&wor.age);
for(i=0;i {
insert(twortaller);
fscanf(fp“%d%s%f%d“&wor.numberwor.name&wor.wage&wor.age);
}
fclose(fp);
}
void r_rotate(bitree &t)
{//对以*t为根的二叉排序树作右旋转处理,处理之后t指向新的树根节点
// 即旋转之前的左子树的根节点
bitree lc=t->lchild;
t->lchild=lc->rchild;
lc->rchild=t;
t=lc;
}
void l_rotate(bitree &t)
{//对以*p为跟的二叉排序树作左旋转处理,处理之后p指向新的树根节点
// 即旋转之前的右子树的根节点
bitree rc=t->rchild;
t->rchild=rc->lchild;
rc->lchild=t;
t=rc;
}
void leftbalance(bitree &t)
{//对以指针t所指节点为根的二叉树作左平衡旋转处理,本算法结束时,指针t指向新的根节点
bitree lc=t->lchild;
switch(lc->bf)
{
case LH: //新节点插入在*t的左孩子的左子树上,要作单右旋处理
t->bf = lc->bf = EH;
r_rotate(t);
break;
case RH: //新节点插入在*t的左孩子的右子树上,要作双旋处理
bitree rd = lc->rchild;
switch(rd->bf)
{//修改*T及其孩子的平衡因子
case LH:
t->bf = RH;
lc->bf = EH;
break;
case EH:
t->bf = lc->bf = EH;
break;
case RH:
t->bf = EH;
lc->bf = LH;
break;
}
rd->bf = EH;
l_rotate(t->lchild);//对*t的左子树作左平衡处理
r_rotate(t);//对*t作右旋平衡处理
break;
}
}
void rightbalance(bitree &t)
{//对以指针t所指节点为根的二叉树作右平衡旋转处理,本算法结束时,指针t指向新的根节点
bitree rc = t->rchild;
switch(rc->bf)//检查*T的右子树的平衡度,并作相应的平衡处理
{
case RH:
//新节点插入在*t的右孩子的右子树上,要作单左旋处理
t->bf = rc->bf = EH;
l_rotate(t);
break;
case LH:
//新节点插入在*t的右孩子的左子树上,要作双旋处理
bitree ld = rc->lchild;
switch(ld->bf)
{//修改*t及其孩子的平衡因子
case RH:
t->bf = LH;
rc->bf = EH;
break;
case EH:
t->bf = rc->bf = EH;
break;
case LH:
相关资源
- 二叉树的C语言实现,实现二叉树基本
- 《C++面向对象程序设计》课程设计—
- C语言课程设计——职工管理系统
- 数据结构的二叉树用C语言实现的代码
- C语言实现二叉树的创建、插入、删除
- C语言版的职工管理系统课设
- 数据结构栈、队列、二叉树、顺序查
- 数据结构二叉树家谱
- 使用C++的二叉搜索树实现学生成绩管
- 二叉树遍历
- c语言,二叉树,前中后,递归,非递
- 二叉树中从后序遍历序列和中序遍历
- 平衡二叉树的c语言实现
- Huffman编码(二叉树应用)
- 家谱管理系统 VC
- C++二叉树基于Mfc的程序开发
- C语言数据结构程序表达式求值 二叉树
- 先序后继线索二叉树
- 原创c++二叉树抽象数据类型实现
- 输出二叉树中某结点的双亲结点
- 二叉树已知后序和中序遍历求前序遍
- 二叉树实现
- 数据结构C语言课程设计平衡二叉树
- 二叉树的插入C语言
- 数据结构c语言版建立二叉树,中序非
- c++版创建并输出二叉树完整代码
- c++职工管理系统链表
- 数据结构二叉树代码
- 按层次输出二叉树
- 二叉树的前序中序后序遍历代码
评论
共有 条评论