xxxx大学计算机学院。
2024年6月15日。
目录。设计题目一:表达式求值2
设计题目二:迷宫问题10
设计题目三:八皇后问题19
课程设计心得体会23
设计题目一:表达式求值。
一、问题描述。
表达式求值是程序设计语言编译中一个基本的问题。任何一个表达式都是由操作数、运算符和界限符组成的有意义的式子。一般地,操作数既可以是常数,也可以是常量或变量。
运算符有算术运算、关系运算、逻辑运算。界限符有左右括号和表达式结束符等。在这里,只讨论加、减、乘、除算术表达式。
二、设计思路。
1、由于中缀表达式对两位和两位以上的数据运算处理比较方便,因此采用中缀表达式算法处理表达式。
2、将表达式以字符串的形式输入,以等号结束(操作数栈中初始化的是等号),从左向右扫描表达式,直到遇到等号时候结束。在扫描过程中遇到操作数,继续扫描,进行多位数字处理,处理完后直接存入操作数栈中,遇到运算符,将该运算符与运算符栈顶运算符的优先级比较,分一下几种情况处理。
1)当前运算符优先级小于栈顶运算符优先级而且运算符不是"("时从数栈中取数,从运算符栈中取运算符进行运算,结果入操作数栈,继续扫描。
2)当前运算符是")"而且栈顶元素是"("时候去括号,将“(”出运算符栈,继续扫描。
3)当前运算符的优先级大于栈顶元素优先级或者是"("时候直接入操作符栈,继续扫描。
三、数据结构的设计。
#define max 1000
typedef struct操作数栈的定义。
double data[max];
int top;
seqstack,*pseqstack;
#define m 100
typedef struct操作符栈的定义。
char data[m];
int top;
seqstack,*pseqstack;
四、功能函数设计。
pseqstack init_stack();初始化一个空操作数栈。
empty_stack(pseqstack s);判断栈是否为空。
push_stack(pseqstack s,double x);操作数入栈。
pop_stack(pseqstack s,double *x);操作数出栈。
get_stack(pseqstack s,double *x);获取栈顶元素。
destory_stack(pseqstack *s);销毁栈。
对操作符栈的操作函数和以上类似,不再赘述。
void input(char *infixexp);输入表达式。
int isnum(char c);判断扫描到的字符是不是数字。函数流程如下:
int priority(char op);返回运算符优先级。
double infix_exp_value(char *infixexp);对中缀表达式直接求值的实现。
int main()函数流程如下:
五、程序源**。
#include<>
#include<>
#include<>
/操作数栈的定义及操作。
#define max 1000
typedef struct
double data[max];
int top;
seqstack,*pseqstack;
/初始化一个空栈。
pseqstack init_stack(void)
pseqstack s;
s=(pseqstack)malloc(sizeof(seqstack));
if(s)s->top=-1;
return s;
/判断栈是否为空。
int empty_stack(pseqstack s)
if(s->top==-1)
return 1;
elsereturn 0;
/元素入栈。
int push_stack(pseqstack s,double x)
if(s->top==max-1)
else/元素出栈。
int pop_stack(pseqstack s,double *x)
if(empty_stack(s))
else/取栈顶元素。
int get_stack(pseqstack s,double *x)
if(empty_stack(s))
else/销毁栈。
void destory_stack(pseqstack *s)
if(*s)
free(*s);
*s=null;
#define m 100
/操作符栈的定义及操作。
typedef struct
char data[m];
int top;
seqstack,*pseqstack;
pseqstack init_stack()
pseqstack s;
s=(pseqstack)malloc(sizeof(seqstack));
if(s)s->top=-1;
return s;
/判断栈空。
int empty_stack(pseqstack s)
if(s->top==-1)
return 1;
elsereturn 0;
/入栈。int push_stack(pseqstack s,char x)
if(s->top==m-1)
else/元素出栈。
int pop_stack(pseqstack s,char *x)
if(empty_stack(s))
else/获取栈顶元素。
int gettop_stack(pseqstack s,char *x)
if(empty_stack(s))
else/销毁栈。
void destory_stack(pseqstack *s)
if(*s)
free(*s);
*s=null;
return ;
/判断读入的字符是否是数字。
int isnum(char c)
if(c>='0'&&c<='9')
return 1;
elsereturn 0;
/返回运算符优先级。
int priority(char op)
switch(op)
/对中缀表达式直接求值。
double infix_exp_value(char *infixexp)
pseqstack s1操作数。
pseqstack s2操作符。
char w,topelement,ch;
double a,b,c,sum,result;
s1=init_stack();
s2=init_stack();
if(!s1||!s2)
push_stack(s2,'=
w=*infixexp;
while((gettop_stack(s2,&ch),ch)!=w取栈顶元素,判断是否是数字。
else对运算符的处理。
if(priority((gettop_stack(s2,&ch),ch))>priority(w)&&gettop_stack(s2,&ch),ch当前运算符优先级小于栈顶。
//优先级而且运算符不是"("时从数栈中取数,//从运算符栈中取运算符进行运算,结果入操作数栈。
pop_stack(s2,&topelement);
pop_stack(s1,&a);
pop_stack(s1,&b);
switch(topelement)
case'+'c=a+b;break;
case'-'c=b-a;break;
case'*'c=a*b;break;
case'/'c=b/a;break;
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 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 初始化时每个方格都是关闭的,一个...