数据结构课程设计.docx

上传人:b****7 文档编号:11395300 上传时间:2023-02-28 格式:DOCX 页数:18 大小:147.16KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共18页
数据结构课程设计.docx_第2页
第2页 / 共18页
数据结构课程设计.docx_第3页
第3页 / 共18页
数据结构课程设计.docx_第4页
第4页 / 共18页
数据结构课程设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

目录

1.查找子系统2

1.1内容及要求2

1.2程序分析及算法描述2

1.3结构图及流程图3

1.4源代码:

5

1.5结果分析:

6

2.迷宫求解问题7

2.1题目分析7

2.2.流程图:

7

3、源代码9

4.运行结果:

13

心得体会15

参考文献16

 

 

1.查找子系统

1.1内容及要求

1.设计一个选择式菜单。

查找子系统

******************************************************

*1……折半查找*

*2……哈希查找*

*0……返回*

******************************************************

请选择菜单号(0…2):

2.分别实现折半查找和哈希查找。

3.哈希函数采用除留余数法,解决冲突的方法任选。

1.2程序分析及算法描述

1.折半查找实现过程

折半查找是对有序表的查找,确定查找记录的区间,通过比较中间值,逐步减半区间,直到找到或找不到该记录为止。

while(low<=high)

{

mid=(low+high)/2;

if(key

high=mid-1;

elseif(key>data[mid])

low=mid+1;

elseif(key==data[mid])

{

printf("\ndata[%d]=%d\n\n",mid,key);

break;

}

}

if(low>high)printf("\n没找到\n\n");

}

 

2.构造哈希表算法实现过程

for(i=0;i

{

j=data[i]%p;

while(hash[j])

{

j++;

j=j%p;

}

hash[j]=data[i];

}

3.哈希查找的算法实现

哈希查找,确定步长,采用除留余数法构造哈希表,给定Key,有哈希函数求的哈希地址,若此位置没记录则查找不成功,否则比较关键字,若与给定值相等,成功,否则找下一位置,直到相等或为空结束。

j=key%p;

while(hash[j]&&hash[j]!

=key)

{

j++;

j=j%p;

}

if(hash[j])

printf("\nhash[%d]=%d\n\n",j,key);

else{

printf("\n没找到\n\n");

hash[j]=key;

}

1.3结构图及流程图

折半查找:

在下面的有序表中查找关键字i的数据元素;

假设指针low和hight分别指示待查元素所在范围的上届和下届,指针mid指示区间的中间位置:

0513346342873221049202

Lowmidhigh

 

1.4源代码:

#include

#include

#include

#defineN100

intmax,key,data[N];

voidSelect(void);

voidSearchBinary(intdata[],intkey){

intlow=0;

inthigh=max-1;

intmid;

while(low<=high){

mid=(low+high)/2;

if(key

high=mid-1;

elseif(key>data[mid])

low=mid+1;

elseif(key==data[mid]){

printf("\ndata[%d]=%d\n\n",mid,key);

break;

}

}

if(low>high)

printf("\n没找到\n\n");

Select();

}

voidSearchHash(intdata[],intkey){

inti,j,hash[N+4]={0},p=max+4;

for(i=0;i

j=data[i]%p;

while(hash[j]){

j++;

j=j%p;

}

hash[j]=data[i];

}

j=key%p;

while(hash[j]&&hash[j]!

=key){

j++;

j=j%p;

}

if(hash[j])

printf("\nhash[%d]=%d\n\n",j,key);

else{

printf("\n没找到\n\n");

hash[j]=key;

}

Select();

}

voidInitData(){

printf("要查找的数据:

");

scanf("%d",&key);

Select();

}

voidSelect(void){

inta;

printf("选择执行方式:

");

scanf("%d",&a);

switch(a){

case1:

SearchBinary(data,key);break;

case2:

SearchHash(data,key);break;

case0:

InitData();break;

}

}

main(){

inti;

printf("1折半查找\n2哈希查找\n0返回\n");

printf("输入数据个数:

");

scanf("%d",&max);

printf("输入数列:

");

for(i=0;i

scanf("%d",&data[i]);

Select();

}

1.5结果分析:

2.迷宫求解问题

2.1题目分析

本题是迷宫求解问题,由0和1构成的m*n维矩阵表示一个迷宫。

0为路,1为墙。

在入口处的上下左右进行查找,找到0后表示通路,在此0处继续查找。

直至找到一条到出口的路,即表示迷宫已解出。

显示坐标表示迷宫路径。

本题用到的是数据结构是栈

2.2.流程图:

 

01

 

 

 

整体流程图

 

 

 

主程序流程图

3、源代码

#include

#include

#include

#defineMA100

#defineM15

#defineN15

typedefstruct

{

intx;

inty;

intd;//该点下一个可能方向上的点,1表示向右,2向下,3向左,4向上

}Data;

typedefstruct

{

intpos;

Datadata[MA];

}Node,*Stack;

/*************栈函数****************/

StackInitStack()/*初始化*/

{

Stackps;

ps=(Stack)malloc(sizeof(Node));

if(!

ps)

exit(-1);

ps->pos=-1;

returnps;

}

intempty(Stackstack)/*判断栈空*/

{

if(stack->pos==-1)

return1;

else

return0;

}

voidPush(Stackps,Datax)/*入栈*/

{

if(ps->pos>=MA-1)

exit(-1);

else

{

ps->pos++;

ps->data[ps->pos]=x;

}

}

voidPop(Stackps)/*出栈*/

{

if(ps->pos==-1)

exit(-1);

else

ps->pos--;

}

DataGetTop(Stackps)/*取栈顶元素*/

{

returnps->data[ps->pos];

}

DataSet(intx,inty,intd)

{

Dataelement;

element.x=x;

element.y=y;

element.d=d;

returnelement;

}

voidDisplay(Stackps)/*显示路径*/

{

inti=0,j,k,a[N],b[N];

Dataelement;

printf("路径通过的点的横,纵坐标为:

\n");

while(!

empty(ps))

{

element=GetTop(ps);

Pop(ps);

a[i]=element.x;

b[i]=element.y;

i++;

}

j=i-1;

for(k=j;k>=0;k--)

printf("路径坐标为:

%d%d\n",a[k],b[k]);

}

voidMazePath(intmaze[][N],intdirection[][2],intx1,inty1,intx2,inty2)

{

inti,j,k,g,h;

Stackps;

Dataelement;

ps=InitStack();

maze[x1][y1]=2;//标记入口点

Push(ps,Set(x1,y1,0));

while(!

empty(ps))//栈不为空

{

element=GetTop(ps);

Pop(ps);

i=element.x;

j=element.y;

k=element.d;

while(k<=3)//试探各个方向

{

g=i+direction[k][0];

h=j+direction[k][1];

if(g==x2&&h==y2&&maze[g][h]==0)//找到非出口点

{

Push(ps,Set(i,j,k));

Push(ps,Set(x2,y2,k));

Display(ps);

return;

}

if(maze[g][h]==0)//找到可以前进的非出口的点

{

maze[g][h]=2;//标记走过的点

Push(ps,Set(i,j,k+1));

i=g;

j=h;

k=0;

}

else

k++;

}

}

printf("迷宫无解!

\n\n\n");

}

/*************建立迷宫*******************/

voidinitmaze(intmaze[M][N])

{

inti,j;

intm,n;//迷宫行,列

printf("请输入迷宫的行数列数[例:

3.3]\n");

scanf("%d.%d",&m,&n);

printf("\n请输入迷宫的各行各列:

\n用空格隔开,0代表路,1代表墙\n",m,n);

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

scanf("%d",&maze[i][j]);

printf("迷宫为:

\n");

for(i=0;i<=m+1;i++)//加一圈围墙

{

maze[i][0]=1;

maze[i][n+1]=1;

}

for(j=0;j<=n+1;j++)

{

maze[0][j]=1;

maze[m+1][j]=1;

}

for(i=0;i<=m+1;i++)//输出迷宫

{

for(j=0;j<=n+1;j++)

printf("%d",maze[i][j]);

printf("\n");

}

}

main()

{

intmaze[M][N],x1,x2,y1,y2;

intk;

intdirection[][2]={0,1,1,0,0,-1,-1,0};//存放下一个点相对于该点可能的方向

while

(1)

{

printf("┌───────┐\n");

printf("│1.进行迷宫求解│\n");

printf("├───────┤\n");

printf("│0.退出│\n");

printf("└───────┘\n");

printf("请输入代码:

");

scanf("%d",&k);

switch(k)

{

case1:

initmaze(maze);

printf("输入出入口的横坐标纵坐标[例:

11.33]\n");

scanf("%d%d.%d%d",&x1,&y1,&x2,&y2);

MazePath(maze,direction,x1,y1,x2,y2);

break;

case0:

exit(-1);break;

default:

printf("error!

\n\n\n");

}

}

}

 

4.运行结果:

 

 

心得体会

短短几天的数据结构课程设计很快结束了,通过此次的训练我了解到一些简单的应用程序的编译方法,丰富了编程知识及常识,了解到了基础知识的重要性,以前认为的C语言都只是用来编写很小的程序的,这两个题目分别代表了查找和线性性结构这俩大类结构,在编程实现的过程中通过查找资料,学习,写代码这么些过程使得这一学期以来数据结构的学习有了质的提升,将理论转化为实践,并在实践过程中发现了问题,不仅有数据结构方面的,还有C语言方面的,在解决这些问题的同时对所学知识有了更深的理解,以前在理论学习中费解的一些问题也得到了解决。

能够利用函数等模块化思想,提高程序的可读性,也避免了由于程序过于复杂.语句较多而产生错误。

以主函数调用其他的函数,很方便,不容易出错。

所以我们须要课程实习,需要工程训练,这样才能成为真正的二十一世纪合格的大学生!

 

 

参考文献

[1]谭浩强,C程序设计(第三版),清华大学出版社,2005

[2]S巴斯,计算机算法:

设计和分析理论,复旦大学出版社,2005

[3]杨路明,C语言程序设计教程,北京邮电大学出版社,2010

[4]吴伟民,数据结构(C语言版),清华大学出版社,2006

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1