寄语:数据结构课程设计心得体会精品多篇为网友投稿推荐,但愿对你的学习工作带来帮助。
数据结构课程设计 篇一《数据结构》
课程设计报告
学 号 姓 名 班 级 指导教师
XXX XXX XXX XXX 安徽工业大学计算机学院
2014年6月
利用栈实现迷宫问题的求解
一、问题描述
以一个M*N的长方阵表示迷宫,0和1分别表示迷宫中的通路和墙壁。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出米有通路的结论。
二、设计思路
(1)以二维数组maze[m][n]表示迷宫,数组中元素值为0表示通路,1表示障碍。
(2)其中迷宫的入口位置和出口位置默认于maze数组的起始元素位置和最后个元素位置。
(3)以链表作存储结构的栈类型,实现求解迷宫的非递归程序。
三、数据结构定义 typedef struct{
int x; int y; }item; typedef struct{ int x,y,d; }DataType; typedef struct{ DataType data[1000]; int top; }SeqStack,*PSeqStack;
typedef struct{ DataType data[1000]; int top; }SeqStack,*PSeqStack;
四、程序清单 #include#include#include#define m 6 #define n 8 int maze[m+2][n+2]={{1,1,1,1,1,1,1,1,1,1},
typedef struct{
{1,0,1,1,1,0,1,1,1,1}, {1,0,0,0,0,1,1,1,1,1}, {1,0,1,0,0,0,0,0,1,1}, {1,0,1,1,1,0,0,1,1,1}, {1,1,0,0,1,1,0,0,0,1}, {1,0,1,1,0,0,1,1,0,1}, {1,1,1,1,1,1,1,1,1,1}}; int x; int y; }item;
item move[4]={{0,1},{1,0},{0,-1},{-1,0}};
typedef struct{ int x,y,d; }DataType;
typedef struct{ DataType data[1000]; int top; }SeqStack,*PSeqStack;
PSeqStack Init_SeqStack() {
} PSeqStack p; p=(PSeqStack)malloc(sizeof(SeqStack)); if(p) p->top=-1; return p;
int Empty_SeqStack(PSeqStack p) {
}
int Push_SeqStack(PSeqStack p,DataType x) {
}
int Pop_SeqStack(PSeqStack p,DataType *x) { if(p->top==999) return 0; if(p->top==-1) return 1; else return 0; else {
} p->top++; p->data[p->top]=x; return 1;
} if(Empty_SeqStack(p)) return 0; else {
} *x=p->data[p->top]; p->top--; return 1; void Destroy_SeqStack(PSeqStack *p) {
}
int mazepath(int maze[][n+2],item move[],int x0,int y0) {
PSeqStack S; DataType temp; int x,y,d,i,j; if(*p) free(*p); *p=NULL; return;
temp.x=x0; temp.y=y0; temp.d=-1; S=Init_SeqStack(); if(!S) {
} Push_SeqStack(S,temp); while(!Empty_SeqStack(S)) {
Pop_SeqStack(S,&temp); x=temp.x; y=temp.y; d=temp.d+1; while(d<4) {
i=x+move[d]。x; j=y+move[d]。y; if(0==maze[i][j]) { temp.x=x; printf(“栈初始化失败!!!”); return 0;
}
}
} temp.y=y; temp.d=d; Push_SeqStack(S,temp); x=i; y=j; maze[x][y]=-1; if(x==m&&y==n) {
} else d=0; while(!Empty_SeqStack(S)) {
} Destroy_SeqStack(&S); return 1; Pop_SeqStack(S,&temp); printf(“(%d,%d)
} Destroy_SeqStack(&S); return 0; int main() {
}
五、运行及调试分析 mazepath(maze,move,1,1); return 0;
六、课程设计总结等
在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在做设计程序实验时,这将使你做的难度加大,浪费宝贵的时间。使你事倍功半。做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做。通过这次程序设计的实验,使我们学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们们受益匪浅。
大数相乘
一、问题描述
本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果
二、设计思路
1、输入阶段采用一维数组a[],b[] ……此处隐藏4885个字……urn d[4][3];}
if(b=='('){
return d[4][4];}
if(b==')'){
return d[4][5];}
if(b=='#'){
return d[4][6];} } if(a==')'){
if(b=='+'){
return d[5][0];}
if(b=='-'){
return d[5][1];}
if(b=='*'){
return d[5][2];}
if(b=='/'){
return d[5][3];}
if(b=='('){
return d[5][4];}
if(b==')'){
return d[5][5];}
if(b=='#'){
return d[5][6];} } if(a=='#'){
if(b=='+'){
return d[6][0];}
if(b=='-'){
return d[6][1];}
if(b=='*'){
return d[6][2];}
if(b=='/'){
return d[6][3];}
if(b=='('){
return d[6][4];}
if(b==')'){
return d[6][5];}
if(b=='#'){
return d[6][6];} } return 0; } int Operate (int a,char theta,int b){ int c ; if (theta=='+'){
c=a+b; return c; } if (theta=='-'){
c=a-b; return c; } if (theta=='*'){
c=a*b; return c; } if (theta=='/'){
c=a/b; return c; } return 0; } void main(){ SqlCal OPTR; SqlNum OPND; char c,d[5]={'0','0','0','0','0'}; int f=0; char op[]={'+','-','*','/','(',')','#'}; InitCalStack(OPTR); InitNumStack(OPND); printf(“请输入算式并在尾部添加一个#号n”); c=getchar(); PushCal(OPTR,'#'); while(c!='#'||GetTopCal(OPTR)!='#') { if (!In(c,op))
{
d[0]=d[1];
d[1]=d[2];
d[2]=d[3];
d[3]=d[4];
d[4]=c;
c=getchar(); f=1;
}
else
{
if(f==1){
PushNum(OPND,ParseInt(d));
d[0]='0';d[1]='0';d[2]='0';d[3]='0';d[4]='0';
f=0;
}
switch(Preced(GetTopCal(OPTR),c))
{
case'
PushCal(OPTR,c);
c=getchar();
break;
case'=':
PopCal(OPTR);
c=getchar();
break;
case'>':
char theta;int a;int b;
theta=PopCal(OPTR);
b=PopNum(OPND);
a=PopNum(OPND);
PushNum(OPND,Operate(a,theta,b));
break;
}
} } printf(“%dn”,GetTopNum(OPND)); }
程序运行结果: 六,心得体会
通过这次编程,我发现很多编程过程中的不足与问题,很多问题由于考虑不全面,导致程序运行失败。还有一些小问题,比如字母的大小写,括号的遗漏,语法书写错误等等一些基础错误,也是让我体会很深写程序要谨慎仔细。
数据结构课程设计心得体会 篇七通过本次课程设计,对图的概念有了一个新的认识,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很巧妙的事情,经过了思考和老师同学的帮助,我用edges[i][j]=up和edges[j][i]=up就能实现了一个双向图信息的存储。对整个程序而言,Dijkstra算法始终都是核心内容,其实这个算法在实际思考中并不难,也许我们谁都知道找一个路径最短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算机中实现这么一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以浪费了很多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。不过,有了这次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf和包涵在#include头文件中的输入函数。因为课程设计的题目是求最短路径,本来是想通过算法的实现把这个程序与交通情况相连,但是因为来不及查找各地的信息,所以,这个计划就没有实现,我相信在以后有更长时间的情况下,我会做出来的。
你也可以在搜索更多本站小编为你整理的其他数据结构课程设计心得体会精品多篇范文。
文档为doc格式