数据结构二叉排序树 哈希表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构

实验报告

实验内容:排序二叉树,及哈希表

系别班级:网络工程1001

学号:201022074

姓名:杨帆

一、实验目的:

熟悉排序二叉树和哈希表的结构及部分算法

二、实验内容及要求:

1、构造排序二叉树,并实现增删改查。

2、构造哈希表,key值油随机数获得,自己选择解决冲突的算法。

并且计算查找次数及平均查找次数。

三、算法描述:

排序二叉树:

节点的结构:

typedef struct tree

{

int data;

struct tree *left;

struct tree *right;

}Sorttree,*BiTree;

1、插入:以输入的第一个数为树的根节点,之后输入的数若小于

根节点则插入为左孩子,若大于根节点则插入为右孩子,若左右孩

子均已存在,则将小于根节点的与根节点的左孩子比较,将大于根

节点的与根节点的又孩子比较,然后重复上述操作。

2、查找:递归,中序遍历二叉树。

3、删除:首先找到与要删除的数相等的节点,若该节点为叶子节

点,则直接删除。当非叶子节点时,如果该节点在根节点的左边,

则用该节点的右子树中最大的节点将它替换掉,同理,如果该节点

在根节点的右边,则用该节的左子树中最小的节点将它替换掉。

4、修改:查找到该节点,将其删除,然后在插入修改后的节点。

函数说明:

1、int CreatST(BiTree &T)//建立排序二叉树

2、void Inorder(BiTree T)//中序遍历二叉树

3、int Search(BiTree T,int e)//查找

4、void Add(BiTree &T,int e)//插入

5、void Delete(BiTree &T,int e)//删除

6、void modify(BiTree &T,int e)//修改

哈希表:

哈希表即通过key值将数据存储到不同位置而建立起的表,通过key可值直接找到数据的存储位置,减少查找所消耗的时间。所以我们需要表节点中添加一个key来存储key值。当添加元素的key值与表中元素key值相同时,查看下一个存储位置是否有元素,若没有将该元素存储在新找到的位置否则继续找下一位置,直到找到可存储的位置。

Key值随机产生。

哈希表结构:

typedef struct ele

{

int data;

int key;

}Elemtype;

typedef struct hashtable

{

Elemtype elem[Max_num];

int count;

int sizeindex;

}HashTable;

1、宏定义表中最大存储个数

#define Max_num 15

2、表中元素初始化

Key值和数据值均为-1表示没有存储数据#define No_key -1

#define No_data -1

四、程序代码:

1、二叉排序树代码:

#include

#include

typedef struct tree

{

int data;

struct tree *left;

struct tree *right;

}Sorttree,*BiTree;

int CreatST(BiTree &T)

{

BiTree p,q;

int j,n=1;

while (n>0)

{

printf("输入数据:\n");

scanf("%d",&n);

if(n==-1) break;

if(T==NULL)

{

T=(Sorttree*)malloc(sizeof(Sorttree));

T->data=n;

T->left=NULL;

T->right=NULL;

continue;

}

p=T;

while (p)

{

if(n==p->data)

{

printf("该数已经存在,请重新输入!\n");

break;

}

q=p;

if(ndata)

{j=1;p=p->left;}

else

{j=2;p=p->right;}

}

if(p)continue;

if(j==1)

{

q->left=(Sorttree*)malloc(sizeof(Sorttree));

p=q->left;p->data=n;p->left=NULL;p->right=NULL;

}

else if(j==2)

{ q->right=(Sorttree*)malloc(sizeof(Sorttree));

p=q->right;p->data=n;p->left=NULL;p->right=NULL;} }

return 1;

}

void Inorder(BiTree T)

{

if(T)

{

Inorder(T->left);

printf("%d ",T->data);

Inorder(T->right);

}

}

int Search(BiTree T,int e)

{

BiTree p;

p=T;

while(p)

{

if(e==p->data)

return 1;

else if(e>p->data)

p=p->right;

else p=p->left;

}

return 0;

}

void Add(BiTree &T,int e)

{

BiTree p,q;

p=T;

int j=0;

while(p)

{

q=p;

if(edata)

{

j=1;

p=p->left;

相关文档
最新文档