程序设计《任选一题》

程序设计《任选一题》,第1张

/*查找算法

问题描述:

设计一个实现顺序查找、二分查找(折半查找)、二叉排序树、哈希查找算法的程序,并具有人机交互界面。

基本要求:

(1)设计一个菜单将实现的查找算法的名字显示出来,并提示用户对查找算法进行选择;

(2)分别实现顺序查找、二分查找(折半查找)、二叉排序树、哈希查找;

(3)哈希函数采用除留余数发,解决冲突的方法大家任选择一种;

(4)二叉排序树必须实现构建、查找、插入、删除四个基本 *** 作;

(5)输出各种排序的结果并进行比较。*/

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define MAX 20

typedef struct/*顺序结构数据类型*/

{

int key

}RecordType

typedef struct

{

RecordType r[MAX+1]

int length

}RecordList

typedef struct

{

RecordType HashTable[MAX]

}RecordHash

typedef struct node /*二叉排序树的结点结构*/

{

int key

struct node *lchild,*rchild

}BSTNode,*BSTree

void page_title(char *menu_item) /*返回界面函数*/

{

clrscr()

printf("查找算法 \n\n\n\n\n%s\n\n",menu_item)

}

void return_confirm()

{

printf("按任意键返回\n")

getch() /*从键盘终端接受一个字符*/

}

RecordList creat1()/*建立线性表*/

{

RecordList h

int i,n=1

h.length=0

printf("请输入第1个数:")

scanf("%d",&i)

while(i!=0)

{

h.length++

h.r[h.length].key=i

printf("请输入第%d个数:",++n)

scanf("%d",&i)

}

return h

}

void InsertBST(BSTree &p,int k)

{

BSTNode *s

if(p==NULL)

{

s=(BSTNode*)malloc(sizeof(BSTNode))

s->key=k

s->lchild=NULL

s->rchild=NULL

p=s

}

else if(k<p->key)

InsertBST(p->lchild,k)

else if(k>p->key)

InsertBST(p->rchild,k)

}

BSTNode *creat2() /*创建二叉排序树*/

{

BSTNode *h

int k,i=1

h=NULL

printf("请输入第1个关键字:")

scanf("%d",&k)

while(k!=0)

{

InsertBST(h,k)

printf("请输入第%d个关键字:",++i)

scanf("%d",&k)

}

return h

}

void SeqSearch(RecordList l) /*顺序查找*/

{

int i

int k

page_title("顺序查找")

printf("请输入要查找的关键字:")

scanf("%d",&k)

l.r[0].key=k

i=l.length

while(l.r[i].key!=k) i--

if(i==0) printf("查找失败\n")

else

{

printf("l.r[%d].key=%d\n",i,k)

printf("查找成功\n")

}

return_confirm()

}

void Binsrch(RecordList l) /*二分查找*/

{

int k,j,i=0

int low=1,high=l.length,mid

page_title("二分查找")

printf("请输入要查找的关键字:")

scanf("%d",&k)

while(low<=high)

{

mid=(low+high)/2

if(l.r[mid].key==k)

{

i=mid

break

}

else

if(k<l.r[mid].key) high=mid-1

else low=mid +1

}

if(i!=0)

{

printf("l.r[%d].key=%d\n",i,k)

printf("查找成功\n")

}

else printf("查找失败\n")

return_confirm()

}

void SearchBST(BSTNode *h,int k) /*二叉排序树的查找*/

{

if(!h)

{

printf("查找失败\n")

return_confirm()

}

else if(h->key==k)

{

printf("查找成功\n")

return_confirm()

}

else if(h->key>k)

SearchBST(h->lchild,k)

else

SearchBST(h->rchild,k)

}

RecordHash creat3() /*创建哈希表*/

{

RecordHash ht

int i,j=1,k

for(i=0i<MAXi++)

ht.HashTable[i].key=0

printf("请输入第1个关键字:")

scanf("%d",&k)

while(k!=0&&j<MAX)

{

i=k%13

while(ht.HashTable[i].key!=0) i++

ht.HashTable[i].key=k

printf("请输入第%d个关键字:",++j)

scanf("%d",&k)

}

return ht

}

void HashSearch(RecordHash ht) /*哈希查找*/

{

int k,i

page_title("哈希查找")

printf("请输入要查找的关键字:")

scanf("%d",&k)

i=k%13

if(ht.HashTable[i].key==k)

{

printf("ht.HashTable[%d].key=%d\n",i,k)

printf("查找成功\n")

}

else

{

i=i+1

for(i<MAXi++)

if(ht.HashTable[i].key==k)

{

printf("ht.HashTable[%d].key=%d\n",i,k)

printf("查找成功\n")

break

}

if(i==MAX) printf("查找失败\n")

}

return_confirm()

}

void main()

{

RecordList L1,L2

BSTNode *pt

RecordHash ht

int k,i

printf("\n创建顺序查找线性表,输入0则结束输入(可不按顺序输入)\n")

L1=creat1()

printf("\n创建二分查找线性表,输入0则结束输入(按递增顺序输入)\n")

L2=creat1()

printf("\n创建二叉排序树,输入0则结束输入\n")

pt=creat2()

printf("\n创建哈希表\n")

ht=creat3()

menu:page_title("请选择查找方式,输入0则结束输入")

printf("顺序查找请按1\n二分查找请按2\n二叉排序树查找请按3\n哈希查找请按4\n推出请按0\n")

switch(getch())

{

case '1':

SeqSearch(L1)

break

case '2':

Binsrch(L2)

break

case '3':

page_title("二叉排序树查找")

printf("请输入要查找的关键字:")

scanf("%d",&k)

SearchBST(pt,k)

break

case '4':

HashSearch(ht)

break

case '0':

exit(0)

default :

printf("输入错误,按任意键返回")

getch()

}

goto menu

}

1。建立无向图,应该是棋盘格数的方阵,比如64×64(国际象棋)或者90×90,初始化为全零.根据马的走法,对可以直达春册银的两格建立一条边,就是对应位置为1。

2。然后指定一个出发点(当然也可以是从所有点姿迅出发一一去试),沿着这些边到达下一格,并记录已达到的格中。

3.如果不重复完成,则成功。如果无法继续走到未到达的格,只能到已到达的格子,则失败。

4.这个扒宴走棋的过程需要一种策略来遍历各种情况。比如我们可以规定如果有最多八种可能,则马先测试走那种,这个编写成递归就非常方便。

java马踏棋盘设计目的是解决实际的应用问题锋改,特别是非数值计算类型的应用问题。

马踏棋盘的基本过程:国际象棋的棋盘为8*8的方格棋盘薯返。现将"马"放在任意指定的方格中,按照"马"走棋的规则将"马"进行移动。要求每个方格只能进入一次,最终使得"马"走遍棋盘的64个方格。

马踏棋盘的解决方案:基于深度优先搜索的方法是比较常用的算法,深度优先搜索算法也是数据结构中的经典算法之银手判一,主要是采用递归的思想,一级一级的寻找,最后找到合适的解。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12558468.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存