数据结构课程设计

发布 2022-10-05 02:08:28 阅读 7740

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 初始化时每个方格都是关闭的,一个...