《数据结构》
课程设计报告。
安徽工业大学计算机学院。
2023年6月。
目录。一、迷宫问题求解 2
二、大数相乘 8
三、学生成绩查询系统(二叉排序树) 10
一、问题描述:
利用栈求解迷宫问题。
二、设计思路:
首先先定义栈,初始化,入栈,出栈,删除栈,判空等,然后再结合具体迷宫算法。
三、数据结构定义。
typedef struct//定义move数组 ,,
typedef struct ,,
typedef struct
int x,y,d;//坐标位置与方向。
datatype;
typedef struct //定义一个顺序栈
else /顺序栈出栈删除栈顶元素。
int pop_pseqstack(pseqstack s,datatype *x)//将删除的元素保存在*x中
else /迷宫问题求解。
int mazepath(int maze[m+2][n+2],item move,int x0,int y0)
push_seqstack(s,temp);/迷宫入口点入栈。
while(!empty_seqstack(s))
可以走,用栈保存可以走的路径。
x=i;y=j;maze[x][y]=-1;
if(x==m&&y==n)
此时最后的出口坐标应该入栈。
push_seqstack(s,temp);
while(!empty_seqstack(s))
pop_pseqstack(s,&temp);/弹出。
push_seqstack(s1,temp);/入栈。
printf("可以走的路径坐标:");
while(!empty_seqstack(s1))
pop_pseqstack(s1,&temp);
printf("(d,%d)",maze[
printf("");
for(o=0;ofor(p=0;pif(maze[o][p]==100
printf
elseprintf("■
printf("
destory_seqstack(&s);/销毁栈。
return 1;
else d=0;//方向复位,从第一个方向开始试探。
else d++;试探下一个方向。
destory_seqstack(&s);
return 0;//迷宫无路 }
/主函数的实现。
void main()
int result; int i,j;
int x0=1;int y0=1; /定义一个开始点x0,yo
int maze[m+2][n+2]=;
printf("原迷宫图");
for(i=0;i for(j=0;jif(maze[i][j]==0)
printf("⊙
elseprintf
printf("printf("下面为129074157 刘伟画出的可走的迷宫路径");
result=mazepath(maze,move,1,1);
printf("%d",result);
六、最终运行效果图:
七、出现的问题及解决过程:
出现的问题:增量数组初始化出错,顺序栈封装出错和出口坐标不对。
1, 顺序栈封装:在迷宫问题中,如果该路径可以走,就将坐标和方向保存起来,然而,该类型是个结构体类型。我在顺序栈中,将data定义成了int类型,结果编译时出错,我第一种方法是,将data[3]定义成二维数组,但是编译不通过。
最后,我恍然大悟,data应该定义成入栈元素的类型,入栈的元素,是个封装的结构体datatype类型。最后第一个问题,解决了。
2, 增量数组初始化出错:item move[4]; 一开始,move[4]我想它是个数组,数组中包含两个成员x,y。所以我初始化时,想当然move[0].
x=;move[0].y=;…这点体现了我的基础知识不牢固啊。最后我想起了结构体的初始化,item move[4]=,最后问题解决了。
3, 出口坐标不对:
经改进: if(x==m&&y==n)
此时最后的出口坐标应该入栈。
push_seqstack(s,temp);
八、最终改进的输出:
一、 可以看见上面的输出,并不好看,所以我想了一个办法,既然栈是先进后出。我想了个办法,就是建立两个栈s,s1,当最后s中的元素逐个弹出时,此时我让它们在逐个进入s1,这样输出的迷宫路径就是顺着走的了,方便**。
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...