问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-24 08:53

我来回答

4个回答

热心网友 时间:2022-05-03 03:48

既然我能帮就帮吧。

题目:对记录序列:{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.length;/*置区间初值*/
while( low <= high)
{
mid=(low+high) / 2;
if (k==l.r[mid]. key)
return (mid);/*找到待查元素*/
else
if (k<l.r[mid]. key)
high=mid-1;/*未找到,则继续在前半区间进行查找*/
else
low=mid+1;/*继续在后半区间进行查找*/
}
return (0);
}

void InsertBST(BSTree *bst, KeyType key)
/*若在二叉排序树中不存在关键字等于key的元素,插入该元素*/
{
BSTree s;
if (*bst == NULL)/*递归结束条件*/
{
s=(BSTree)malloc(sizeof(BSTNode));/*申请新的结点s*/
s-> key=key;
s->lchild=NULL;
s->rchild=NULL;
*bst=s;
}
else
if (key < (*bst)->key)
InsertBST(&((*bst)->lchild), key);/*将s插入左子树*/
else
if (key > (*bst)->key)
InsertBST(&((*bst)->rchild), key); /*将s插入右子树*/
}

void CreateBST(BSTree *bst)
/*从键盘输入元素的值,创建相应的二叉排序树*/
{
KeyType key;
*bst=NULL;
printf("请建立记录序列的二叉排序树:\n");
scanf("%d", &key);
while (key!=ENDKEY) /*ENDKEY为自定义常量*/
{
InsertBST(bst, key);
scanf("%d", &key);
}
}

int SearchBST(BSTree bst, KeyType key)
/*在根指针bst所指二叉排序树中,递归查找某关键字等于key的元素,若查找成功,返回指向该元素结点指针,否则返回空指针*/
{
if (!bst)
return NULL;
else
if (bst->key == key)
return 1;/*查找成功*/
else
if (bst->key > key)
return SearchBST(bst->lchild, key);/*在左子树继续查找*/
else
return SearchBST(bst->rchild, key);/*在右子树继续查找*/
}

BSTNode * DelBST(BSTree t, KeyType k) /*在二叉排序树t中删去关键字为k的结点*/
{
BSTNode *p, *f,*s ,*q;
p=t;
f=NULL;
while(p) /*查找关键字为k的待删结点p*/
{
if(p->key==k ) break; /*找到则跳出循环*/
f=p; /*f指向p结点的双亲结点*/
if(p->key>k)
p=p->lchild;
else
p=p->rchild;
}
if(p==NULL) return t; /*若找不到,返回原来的二叉排序树*/
if(p->lchild==NULL) /*p无左子树*/
{
if(f==NULL)
t=p->rchild; /*p是原二叉排序树的根*/
else
if(f->lchild==p) /*p是f的左孩子*/
f->lchild=p->rchild ; /*将p的右子树链到f的左链上*/
else /*p是f的右孩子*/
f->rchild=p->rchild ; /*将p的右子树链到f的右链上*/
free(p); /*释放被删除的结点p*/
}
else /*p有左子树*/
{
q=p;
s=p->lchild;
while(s->rchild) /*在p的左子树中查找最右下结点*/
{
q=s;
s=s->rchild;
}
if(q==p)
q->lchild=s->lchild ; /*将s的左子树链到q上*/
else
q->rchild=s->lchild;
p->key=s->key; /*将s的值赋给p*/
free(s);
}
return t;
} /*DelBST*/

void Visit(int ch)
{
printf("%d ",ch);
}

void InOrder(BSTree root)
{
if (root!=NULL)
{
InOrder(root ->lchild);
Visit(root ->key);
InOrder(root ->rchild);
}

}

void InitRecord(RecordList *l)
{
l->length=0;
}
int CreatRecord(RecordList *L)
{
int i;
for(i=0;i<9;i++)
{
printf("输入%d号记录:",i+1);
scanf("%d",&L->r[i+1].key);
L->length++;
}
printf("输入完毕!\n");
return(1);
}

void main()
{ int result,a,k;
RecordList l;
BSTree bst;
InitRecord(&l);
CreatRecord(&l);
printf("请输入要查找的记录:");
scanf("%d",&k);
printf("顺序查找结果为:\n");
result=SeqSearch(l,k);
if(result!=0)
printf("该关键字在表中位置为%d\n",result);
else
printf("查找失败!\n");
printf("折半查找结果为:\n");
result=BinSrch(l,k);
if(result!=0)
printf("该关键字在表中位置为%d\n",result);
else
printf("查找失败!\n");
CreateBST(&bst);
printf("请输入要查找的记录:");
scanf("%d",&k);
a=SearchBST(bst,k);
printf("利用二叉排序树查找结果为:\n");
if(a==1)
printf("查找成功!\n");
else
printf("查找失败!\n");
printf("请输入要删除的记录:");
scanf("%d",&k);
DelBST(bst,k);
printf("遍历删除记录后的二叉排序树:\n");
InOrder(bst);
printf("\n");
}

热心网友 时间:2022-05-03 05:06

要全回答是不可能的啊!这几个算法很常见的,查看下书籍肯定看得到的!

热心网友 时间:2022-05-03 06:41

课设么?网上自己搜搜吧~ 整合一下就ok了~

热心网友 时间:2022-05-03 08:32

不是吧 这几个都是经典的查找方法那都可以找到的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 存储管理分区分配算法实现的课程设计? 学PLC要学多久? 排序算法课程设计 银行家算法课程设计 PLC培训要多少钱? 大学课程《算法分析与设计》中动态规划和贪心算法的区别和联系?_百度... 学习PLC需要多长时间可以独立完成编程? 《算法分析与设计》课程讲什么内容? 鱼怎么养殖方法 证券etf代码是多少? 证券etf是什么 搞网络直播是人学坏的表现吗,为什么? 怎么学习直播说话,感觉自己挺有话说的,但是直播的时候,人家不打字出来,我也不知道说什么了 直播带货主要在哪里学? 普通人可以学习网红直播赚钱吗,具体应该怎么操作? 想学直播,做网红怎么办? 直播心理学为什么中午和晚上直播 主播需要学吗? 你是做什么的,为什么要学直播,谁组织的? 高三学生选择做起网络直播,家长应该怎么办呢? 自学plc要多久啊 紧急求助:有关指令调度算法的课设问题 有人知道学会PLC编程需要多久吗? 排序算法的实现与比较的课程设计 算法课程设计中 int a,k; if(a&(1&lt;&lt;k)==0) 是什么意思 学PLC需要准备什么? 算法与数据结构课程设计——迷你计算器,这个算法与程序怎么做? 学习PLC要多少钱,学习plc自动化编程要多久 我想学PLC编程 学费多少 要学多久 算法设计与分析课程总结怎么写???、急急急!!! 苹果手机怎么关闭华为视频自动续费 电视机上开通的华为视频会员怎我在电视机上微信扫码开通的华为会员自己... 华为视频如何取消会员续费 社保停了,公积金还可以交吗? 曾小贤和胡一菲的感动事迹 公积金停缴后还能贷款吗 《爱情公寓》,曾小贤亲胡一菲是第几集? 二十四史中的前四史是什么,二十四史的后四史是什么 爱情公寓胡一菲和曾小贤好上是哪一集 公积金停缴后可以贷款买房吗