/**
* 查找:
* 1、顺序查找(顺序表、链表)
* 2、折半查找(折半查找、判定树)
*
* ①算法思想
*
* ②算法设计
*
*/
#include <stdio.h>
#include <iostream>
#include <cstdio>
#include <malloc.h>
#include <cstdlib>
#define MaxSize 20
#define INF 999999
//查找
//1、顺序查找
//①顺序查找---顺序表
typedef struct{
int data[MaxSize];
int length;
}SqList;
int Seq_Search(SqList L,int x){
int i = 0;
while(x != L.data[i] && i <= L.length - 1){
i++;
}
if(i >= L.length)
return -1;
else
return i;
// 或者:
// if(x == L.data[i])
// return i;
// else
// return -1;
}
//②顺序查找---链表
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList Seq_Search(LinkList L,int key){
LinkList p = L;
while(p){
if(p -> data == key)
break;
p = p -> next;
}
if(p -> data == key)
return p;
else
return NULL;
}
//2、折半查找(只适用于顺序表)(补充:利用二分查找判定树构造一棵高度平衡的最优二叉搜索树)
//①折半查找
typedef struct{
int data[MaxSize];
int length;
}SqList;
int Binary_Search(SqList L,int x){
int low = 0,high = L.length - 1,mid;
while(low <= high){
mid = (low + high) / 2;
if(L.data[mid] == x)
break;
else if(L.data[mid] > x)
high = mid - 1;
else
low = mid + 1;
}//二分查找结束
//如果是查找成功的情况
if(low <= high)
return mid;
//如果是查找失败的情况
else
return -1;
}
//②利用二分查找判定树构造一棵高度平衡的最优二叉搜索树
//补充:折半查找判定树就是一棵最优的二叉搜索树(自然也是平衡二叉树),
//将有序数组转换为二叉搜索树,但是这个二叉搜索树要求树高平衡,也就是一棵平衡二叉树:
//(利用二分查找判定树构造一棵高度平衡的最优二叉搜索树!!!)
BiTree build(int *nums,int low,int high){
if(low <= high){
int mid = (low + high) / 2;
BiTree T = (BiTree)malloc(sizeof(BiTreeNode));
T -> data = nums[mid];
T -> lchild = build(nums,low,mid - 1);
T -> rchild = build(nums,mid + 1,high);
return T;
}else{
return NULL;
}
}
查找: 1、顺序查找(顺序表、链表) 2、折半查找(折半查找、判定树)
最新推荐文章于 2023-12-22 16:58:24 发布