2021-04-18 数据结构

学习目标:

查找的基本操作

学习内容:

查找的基本概念
顺序查找法
折半查找法
分块查找法
二叉&平衡树

学习时间:

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]);
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值