查找算法锦集(课程设计)

来源:百度知道 编辑:UC知道 时间:2024/07/04 13:37:26
说明:查找,根据给定的某个值,在查找表(已经排好序)中确定一个其关键字等于给定的记录或数据元素。若表中存在这样的一个记录,则称查找是成功的,此时查找的结果为给出整个记录的信息,或指示该记录在查找表中的位置;若表中不存在关键字等于给定值的记录,则称查找不成功。查找算法有多种,各有优缺点。

题目难度:难

设计要求:要求使用C语言编程,至少完成下述查找算法

1) 顺序查找 从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,查找不成功。

2) 折半查找 先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。

3) 二叉排序树查找

二叉排序树或者是一棵空树;或者是具有下列性质的二叉树:

I. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

II. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

III. 它的左、右子树了分别为二叉排序树。

二叉排序树的插入和删除

二叉排序树是一种动态树表,其特点是,树的结构通常不是一资生成的,面是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。
想问问谁做过了有点,发给我救救命。

既然我能帮就帮吧。

题目:对记录序列:{55,13,23,72,109,67,2,78,13}分别使用顺序查找和折半查找算法实现特定关键字值记录的查找。然后建立该记录序列的二叉排序树,并在其上实现特定关键字值结点的查找和删除。-

#include <stdio.h>
#include <stdlib.h>

#define LIST_SIZE 20
#define ENDKEY 0

typedef int KeyType;

typedef struct
{
KeyType key;

}RecordType;

typedef struct
{
RecordType r[LIST_SIZE+1]; /* r[0]为工作单元 */
int length;
}RecordList;

typedef struct node
{
KeyType key ; /*关键字的值*/
struct node *lchild,*rchild;/*左右指针*/
}BSTNode, *BSTree;

int SeqSearch(RecordList l, KeyType k)
/*在顺序表l中顺序查找其关键字等于k的元素,若找到,则函数值为该元素在表中的位置,否则为0*/
{
int i;
l.r[0].key=k;
i=l.length;
while (l.r[i].key!=k) i--;
return(i);
}

int BinSrch(RecordList l, KeyType k)
/*在有序表l中折半查找其关键字等于k的元素,若找到,则函数值为该元素在表中的位置*/
{
int low,high,mid;
low=1;
high=l.le