数据结构课程设计_数据结构课程设计全
数据结构课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构课程设计全”。
《数据结构》
课程设计报告
学 号 姓 名 班 级 指导教师
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
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[] 在输入阶段当大数输入时,大数a,b从高位到低位分别依次存入数组a[ ],b[ ]。
2.调用函数计算阶段采用一维数组c[ ] 在计算过程中,由个位到高位依次计算各位的结果,并依次存入数组c[ ]中。
三、数据结构定义
int x[N],y[N],z[N*N];
四、程序清单 #include #include #define N 80 void mul(int *x,int *y,int *z){ int i,j;for(i=0;i=0)n[i++]=s[j--]-'0';} void iniXY(int *x, int *y){ int i;for(i=0;i=0)printf(”%d“,z[i--]);printf(”n“);return 0;}
五、运行及调试分析
六、课程设计总结。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。