数据结构课程设计

发布 2022-10-01 21:23:28 阅读 3103

—目录—

1. 需求分析3

2. 概要设计3

3. 详细设计4

4. 测试与分析9

5. 总结9

6. 附录(源程序清单。

1. 需求分析。

以字符列的形式从终端输入语法的正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则运算的求值,并仿照教科书的例子在求值中运算符栈、运算栈、输入字符和主要操作的变化过程。

1. 1问题描述。

设计一个程序,使用栈求解算术表达式。

1.2 基本要求。

1) 输入的形式与输出值范围。

输入需要求解的表达式。

2) 输出的形式。

输出最后的运算结果。

3) 程序所能达到的功能。

输入功能:输入并显示表达式,并对表达式的正确性进行判断。

计算功能:计算正确的表达式,并输出正确结果。

2. 概要设计。

1) 数据结构。

#define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

typedef int status;

typedef int boolean;

2) 程序模块。

主函数。main()

栈的顺序存储。

#define stack_init_size 10

#define stackincrement 2

typedef struct

建立顺序栈。

status initstack ( sqstack *s)

判断。selemtype precede(selemtype t1,selemtype t2)

3. 详细设计。

栈的顺序存储。

#define stack_init_size 10

#define stackincrement 2

typedef struct

selemtype *base;

selemtype *top;

int stacksize; /

sqstack; /

建立顺序栈。

status initstack ( sqstack *s)

s->base=(selemtype *)malloc(stack_init_size*sizeof(selemtype));

if(!(s->base))

exit(overflow);

s->top=s->base;

s->stacksize=stack_init_size;

return ok;

status destroystack(sqstack *s)

free(s->base);

s->base=null;

s->top=null;

s->stacksize=0;

return ok;

status clearstack(sqstack *s)

s->top=s->base;

return ok;

status stackempty(sqstack *s)

if(s->top==s->base)

return true;

elsereturn false;

int stacklength(sqstack *s)

return s->top - s->base;

status gettop(sqstack s,selemtype *e)

if( >

e = return ok;

elsereturn error;

status push(sqstack *s,selemtype e)

if(s->top-s->base>=s->stacksize)

s->base=(selemtype *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(selemtype));

if(!s->base)

exit(overflow);

s->top=s->base+s->stacksize;

s->stacksize+=stackincrement;

(s->top)++e;

return ok;

status pop(sqstack *s,selemtype *e)

if(s->top==s->base)

return error;

e = s->top;

return ok;

status stacktr**erse(sqstack s,status(*visit)(selemtype))

while( >

visit(*

printf("");

return ok;

判断。selemtype precede(selemtype t1,selemtype t2)

selemtype f;

switch(t2)

case '+

case '-if(t1=='t1=='#

f='<

elsef='>

break;

case '*

case '/if(t1=='t1=='t1=='

f='>

elsef='<

break;

case '(if(t1=='

printf("error1");

exit(error);

elsef='<

break;

case ')switch(t1)

case '(f='=

break;

case '#':printf("error2");

exit(error);

default: f='>

break;

case '#':switch(t1)

case '#':f='=

break;

case '(printf("error3");

exit(error);

default: f='>

return f;

status in(selemtype c)

switch(c)

case'+'

case'-'

case'*'

case'/'

case'('

case')'

case'#':return true;

default:return false;

selemtype operate(selemtype a,selemtype theta,selemtype b)

selemtype c;

a=a-48;

b=b-48;

switch(theta)

case'+'c=a+b+48;

break;

case'-'c=a-b+48;

break;

case'*'c=a*b+48;

break;

case'/'c=a/b+48;

return c;

selemtype evaluateexpression()

sqstack optr,opnd;

selemtype a,b,c,x,theta;

initstack(&optr);

push(&optr,'#

initstack(&opnd);

c=getchar();

gettop(optr,&x);

while(c!='#'||x!='#

if(in(c))

switch(precede(x,c))

case'<'push(&optr,c);

c=getchar();

break;

case'='pop(&optr,&x);

c=getchar();

break;

case'>'pop(&optr,&theta);

pop(&opnd,&b);

pop(&opnd,&a);

push(&opnd,operate(a,theta,b));

break;

else if(c>='0'&&c<='9')

push(&opnd,c);

c=getchar();

else printf("you input is error");

exit(error);

gettop(optr,&x);

gettop(opnd,&x);

return x;

主函数。void main()

4. 测试与分析。

输入表达式“1+2*3-4/2”,然后加#号结束,按确认,结果显示为5.

测试完成,无错误信息。

5. 总结。

课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。

经过了一个星期的课程设计,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高,对于理论知识学习不够扎实的我深感“书到用时方恨少”。于是想起圣人说过“温故而知新”,便重拾教材,对知识系统而全面地进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟许多平时学习难以理解掌握的较难知识。学会了如何思考的思维方式,大家很快就找到了设计的灵感。

付出和回报永远成正比关系。还是拿那片林子举例子,满树的果子由你摘,有的人两手往口袋一插,等着落地桃,有的人背着大篓子在树上摘得不亦乐乎。会不会爬树是一码事,不会的话做做接应也好。

但是动不动手就是另一码事了。我知道自己建模计算方面的能力有欠缺,于是担当起广泛收集资料、阅读各类**的角色。以前从没接触过这些,但是现在我可以轻松的搜到想要的**,阅读也很有技巧,知道先从概要开始,筛出哪些有用的信息仔细分析。

后来的结果分析就游刃有余多了, 这些都是从刚开始的茫然不知积累而来的。4

6. 附录(源程序)

typedef char selemtype;

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#define true 1

#define false 0

#define ok 1

#define error 0

#define infeasible -1

typedef int status;

typedef int boolean;

#define stack_init_size 10

#define stackincrement 2

typedef struct

selemtype *base;

selemtype *top;

int stacksize;

sqstack;

status initstack ( sqstack *s)

s->base=(selemtype *)malloc(stack_init_size*sizeof(selemtype));

if(!(s->base))

exit(overflow);

s->top=s->base;

s->stacksize=stack_init_size;

return ok;

status destroystack(sqstack *s)

free(s->base);

s->base=null;

s->top=null;

s->stacksize=0;

return ok;

status clearstack(sqstack *s)

s->top=s->base;

return ok;

status stackempty(sqstack *s)

if(s->top==s->base)

数据结构课程设计

课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 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 初始化时每个方格都是关闭的,一个...