• 大小: 3.15MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-06
  • 语言: 其他
  • 标签: 数据结构  

资源简介

是一个本科生数据结构作业,里面附有一个课程设计报告书。作者是在本科二年级数据结构课上完成的,当时获得了优秀,希望可以给需要的人提供帮助。报告书的格式并不十分规范,请见谅。

资源截图

代码片段和文件信息

//AVL(自动平衡二叉树)
#include “stdafx.h“
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define MaxSize 100
typedef int ElemType;
//每个结点的平均值
struct Keytype //关键数据类型
{
char id[19];
char name[11];
char address[21];
char phone[12];
};

typedef enum
{
EH = 0
LH = 1
RH = -1
}bh_t;

typedef enum
{
FALSE = 0
TRUE = 1
}bool_t;

//定义平衡二叉树
typedef struct BSTNode
{
Keytype key;
int bf; //平衡值
struct BSTNode *lchild *rchild;
}BSTNode *BSTree;

typedef struct
{
BSTree data[MaxSize];
int top;
}SqStack;

BSTree root = NULL r;
int n;

//判断栈空函数
bool StackEmpty(SqStack *s)
{
return (s->top == -1);
}

//初始化栈
void InitStack(SqStack *& s)
{
s = (SqStack *)malloc(sizeof(SqStack));
s->top = -1;
}

//进栈
bool Push(SqStack *& s BSTree e)
{
if (s->top == MaxSize - 1)
return false;
s->top++;
s->data[s->top] = e;
return true;
}

//退栈
bool Pop(SqStack *&s BSTree &e)
{
if (s->top == -1)
return false;
e = s->data[s->top];
s->top--;
return true;
}

//中序遍历
void InOrderTraverse(BSTree root)
{
if (NULL != root)
{
InOrderTraverse(root->lchild);
cout << root->key.name << “ “ << root->key.id << “ “ << root->key.address << “ “ << root->key.name << endl;
InOrderTraverse(root->rchild);
}
}

//右旋转
void R_Rotate(BSTree *p)
{
BSTree lc = (*p)->lchild;
(*p)->lchild = lc->rchild;
lc->rchild = *p;
*p = lc;
}

//左旋转
void L_Rotate(BSTree *p)
{
BSTree rc = (*p)->rchild;
(*p)->rchild = rc->lchild;
rc->lchild = *p;
*p = rc;
}

//左平衡旋转
void LeftBalance(BSTree *T)
{
BSTree lc = (*T)->lchild;
BSTree rd = lc->rchild;
//判断进行向哪边旋转
switch (lc->bf)
{
case LH:
(*T)->bf = lc->bf = EH;
R_Rotate(T);
break;
case RH:
switch (rd->bf)
{
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));
R_Rotate(T);
break;
}
}

//右平衡旋转
void RightBalance(BSTree *T)
{
BSTree rc = (*T)->rchild;
BSTree ld = rc->lchild;
switch (rc->bf)
{
case RH:
(*T)->bf = rc->bf = EH;
L_Rotate(T);
break;
case LH:
switch (ld->bf)
{
case RH:
(*T)->bf = LH;
rc->bf = EH;
break;
case EH:
(*T)->bf = rc->bf = EH;
break;
case LH:
(*T)->bf = EH;
rc->bf = RH;
break;
}
ld->bf = EH;
R_Rotate(&((*T)->rchild));
L_Rotate(T);
break;
}
}

//插入元素
bool_t InsertAVL(BSTree *t Keytype e bool_t *taller) //二叉树插入算法
{
if (NULL == t)
return FALSE;
if (NULL == *t)
{
*t = (BSTree)malloc(sizeof(BSTNode));
if (NULL == *t)
return FALSE;
(*t)->key = e;
(*t)->lchild = (*t)->rchild = NULL;
(*t)->bf = EH;
*taller = TRUE;
}
else
{
if (e.id == (*t)->key.id)
{
*taller = FALSE;
return FALSE;
}
if (e.id

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         22  2018-02-22 17:12  身份证信息管理系统\f2.dat

     文件      16924  2018-02-18 23:21  身份证信息管理系统\身份证信息管理系统.cpp

     文件     741567  2018-08-31 23:03  身份证信息管理系统\身份证信息管理系统.docx

     文件    2582494  2018-02-22 18:42  身份证信息管理系统\身份证信息管理系统.rar

     目录          0  2018-08-31 23:03  身份证信息管理系统

----------- ---------  ---------- -----  ----

              3341007                    5


评论

共有 条评论