C/C++: 数据结构之索引查找(分块查找)

画图举例:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
/**
*
* Author:HackerHao
* Create:2023.12.14
*
*/
typedef struct
{
	int Key;
	int Link;
}indextype;

//分块查找
int IndexSequelSearch(indextype ls[], int s[], int m, int Key)
//关键字为Key, 索引表为ls[0]--ls[m-1], 顺序表为s, 块长为l,m为顺序表长度
{
	int i = 0, j = 0;

	//在索引表中顺序查找
	while (i < m && Key > ls[i].Key)
		i++;

	if (i >= m)
		return -1;      //说明没找到,已经越界,返回-1

	else
	{
		//在顺序表中顺序查找

		j = ls[i].Link;
		while (Key != s[j] && j - ls[i].Link < m + 1)
			j++;                //还没有找到

		if (Key == s[j])
			return j;          //找到
		else
			return -1;
	}
}
int main()
{
	cout << "请输入索引表的块数" << endl;
	int n;
	cin >> n;
	indextype ls[n];
	cout << "请输入每一块中最大的元素和每块的分隔处元素下标: " << endl;

	for (int i = 0; i < n; i++)
	{
		cin >> ls[i].Key >> ls[i].Link;
	}
	cout << "请输入顺序表的元素个数、各自的值:" << endl;

	int cnt = 0;
	cin >> cnt;				 //顺序表元素个数
	int SqList[cnt];
	for (int i = 0; i < cnt; i++)
		cin >> SqList[i];    //各元素值

	int key, m = n;
	cout << "请输入想要查找到元素:" << endl;
	cin >> key;

	int u;
	u = IndexSequelSearch(ls, SqList, m, key);

	if (u != -1)
		cout << "查找成功,为第" << u + 1 << "个记录" << endl;
	else
		cout << "查找失败,不存在!" << endl;

	return 0;
}

/* 输入:
4

14 0
34 5
66 10
85 15

20
8 14 6 9 10 22 34 18 19 31 40 38 54 66 46 71 78 68 80 85
*/
相关推荐
灵典33614 分钟前
数据结构入门-二叉树的层序遍历
数据结构·算法
范纹杉想快点毕业18 分钟前
以项目的方式学QT开发(三)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·开发语言·c++·qt·mysql·算法·命令模式
轮到我狗叫了23 分钟前
力扣.1471数组的k个最强值,力扣.1471数组的k个最强值力扣1576.替换所有的问号力扣1419.数青蛙编辑力扣300.最长递增子序列
java·数据结构·算法
敲代码的瓦龙36 分钟前
STL?list!!!
c语言·开发语言·数据结构·c++·windows·list
程序员莫小特44 分钟前
【GESP真题解析】第 20 集 GESP 二级 2025 年 3 月编程题 1:等差矩阵
c语言·数据结构·c++·算法·青少年编程·矩阵
真的想上岸啊1 小时前
c语言第一个小游戏:贪吃蛇小游戏04
c语言·开发语言
机器视觉知识推荐、就业指导1 小时前
Qt/C++面试【速通笔记九】—视图框架机制
c++·笔记·qt
ROCKY_8171 小时前
数据结构(九)——排序
数据结构·算法·排序算法
lkbhua莱克瓦241 小时前
用C语言实现了——一个基于顺序表的插入排序演示系统
c语言·开发语言·数据结构·程序人生·github·排序算法·交互
君鼎6 小时前
C++设计模式——单例模式
c++·单例模式·设计模式