学习目标:
查找的基本操作
学习内容:
查找的基本概念
顺序查找法
折半查找法
分块查找法
二叉&平衡树
学习时间:
2021.4.16上午
2021.4.18下午
学习产出:
查找的基本概念:
typedef struct
{
int key;
}Elemtype;
顺序查找法:
int Search(int a[], int n, int k)
{
int i;
for (i = 1; i <= n; ++i)
{
if (a[i] = k)
return i;
}
return 0;
}
折半查找法:
int Bsearch(int R[], int low, int high)
{
int mid;
while (low < high) //当表长度大于1时进行循环
{
mid = (low + high) / 2; //取当表的中间位置
if (R[mid] == k) //找到后返回元素的位置
return mid;
else if(R[mid]>k) //说明需要在前面找
high = mid - 1;
else
low = mid + 1;
}
return 0;
}
分块查找法:
typedef struct
{
int key;
int low, high;
}indexElem;
indexElem index[maxSize];
二叉&平衡树:
//二叉树的储存结构
typedef struct
{
int key;
struct doubleBTNode *lchild;
struct doubleBTNode *rchild;
}doubleBTNode;
//查找关键字的算法
doubleBTNode* BSTSearch(doubleBTNode* bt, int key)
{
if (bt == NULL)
return NULL; //来到空指针,查找不成功就返回NULL
else
{
if (bt->key == key)
return bt; //等于根结点的关键字,查找成功,返回结点
else if (key < bt->key) //左子树去找
return BSTSearch(bt->lchild, key);
else //右子树找
return BSTSearch(bt->rchild, key);
}
}
//插入关键字的算法
int BSTInsert(doubleBTNode*& bt, int key)
{
if (bt == NULL) //如果找到插入位置,就创建结点进行插入
{
bt = (doubleBTNode*)malloc(sizeof(doubleBTNode));
bt->lchild = bt->rchild = NULL;
bt->key = key; //将待插关键字保持到新结点,插入成功,返回1
return 1;
}
else
{
if (key == bt->key) //若果已经存在,插入失败,返回0
return 0;
else if (key < bt->key)
return doubleBTNode(bt->lchild, key);
else
return doubleBTNode(bt->rchild, key);
}
}
void CreateBST(doubleBTNode*& bt, int key[], int n)
{
int i;
bt == NULL;//将树清空
for (i = 0; i < n; ++i) //调用插入函数,一个一个插
BSTInsert(bt, key[i]);
}