数据结构——查找算法

1.顺序查找

#pragma once
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define INFEASIBLE -1
#define MAXSIZE 100
typedef int Status;
typedef int KeyType;
typedef int InfoType;
//数据元素类型定义
struct ElemType
{
	KeyType Key;
	InfoType otherinfo;
};
//顺序表结构类型定义
struct SSTable //Sequential Search Table
{
	ElemType* R;//表基址
	int length; //表长
};
//顺序查找
int Search_Seq(SSTable& ST, const KeyType& k)
{
	for (auto i = ST.length; i >= 1; --i)
	{
		if (ST.R[i].Key == k)
		{
			return i;
		}
	}
	return 0;
}
//改进,增加监视哨
int Search_Seq2(SSTable& ST, const KeyType& k)
{
	ST.R[0].Key = k;//监视哨
	auto i = ST.length;
	for (; ST.R[i].Key != k; --i);
	return i;
}

2.折半查找

int Search_Bin(SSTable& S, const KeyType& k)
{
	int low = 1;
	int high = S.length;
	while (low <= high)
	{
		auto mid = (low + high) / 2;
		if (S.R[mid].Key == k)
		{
			return mid;
		}
		else if (S.R[mid].Key < k)
		{
			low = mid + 1;
		}
		else
		{
			high = mid - 1;
		}
	}
	return 0;
}

3.折半查找——递归算法

int Search_Bin2(SSTable& S, const KeyType& k, int low, int high)
{
	if (low > high)
	{
		return 0;
	}
	auto mid = (low + high) / 2;
	if (k == S.R[mid].Key)return mid;
	else if (k < S.R[mid].Key)
	{
		return Search_Bin2(S, k, low, mid - 1);
	}
	else
	{
		return Search_Bin2(S, k, mid +1, high);
	}
}

4.二叉排序树的递归查找

//二叉树的存储结构
typedef struct BSTnode
{
	ElemType data;
	struct BSTnode* lchild, * rchild;
}BSTnode, *BSTree;
//二叉排序树的递归查找
BSTree SearchBST(BSTree& T, const KeyType& e)
{
	if ((!T) || e == T->data.Key)
	{
		return T;
	}
	else if (e < T->data.Key)
	{
		return SearchBST(T->lchild, e);
	}
	else
	{
		return SearchBST(T->rchild, e);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值