> 综合报告 > 总结报告
栏目

数据结构实验报告总结

发布时间:2026-08-24 浏览:83 DOC

导语:这份实验报告总结为您梳理数据结构实践中的关键脉络,从代码调试到算法优化,从条理梳理到问题反思,每一步都扎实可溯。写得清楚、看得明白、用得上手,是交作业前值得多看两眼的“清醒剂”。

报告属性

适用对象:计算机专业大一学生,刚学完c语言基础,写报告还不太熟练的小白。

使用场合:适合给老师交的课程设计报告,或者实验课作业汇报,用来展示计算器程序的设计思路和实现过程。

核心内容:讲清楚怎么用两个栈实现表达式求值,重点是运算符优先级处理和错误判断条理,让老师看懂设计原理。

内容体量:1050字

报告关键词: 表达式求值 栈结构实现 四则运算 c语言编程

报告正文

# include

# define ma__operator_num 100 //运算符栈数组长度

# define ma__data_num 100 //运算数栈数组长度

typedef struct opstack //定义运算符栈

{

char opstack[ma__operator_num];

int top;

}opstack, _popstack;

typedef struct datastack //定义运算数栈

double stack[ma__data_num];

}datastack, _pdatastack;

void initpopstack(popstack postack) //初始化运算符栈

if( !(postack = (popstack)malloc(sizeof(opstack)))) //为运算符栈分配空间

printf(分配内存空间失败! );

e_it(-1);

}

postack->;;;top = -1;

void initpdatastack(pdatastack pdstack) //初始化运算数栈

if( !(pdstack = (pdatastack)malloc(sizeof(datastack)))) //为运算数栈分配空间

pdstack->;;;top = -1;

void pushopstack(popstack postack, char ch) //运算符进栈

postack->;;;opstack[ (postack->;;;top)] = ch;

void popopstack(popstack postack, char ch) //运算符出栈

ch = postack->;;;opstack[postack->;;;top];

postack->;;;top--;

void pushdatastack(pdatastack pdstack, double d) //运算数进栈

(pdstack->;;;top);

pdstack->;;;stack[pdstack->;;;top] = d;

void popdatastack(pdatastack pdstack, double d) //运算数出栈

d = pdstack->;;;stack[pdstack->;;;top];

pdstack->;;;top--;

void clearpopstack(popstack postack) //清空运算符栈

void clearpdatastack(pdatastack pdstack) //清空运算数栈

char gettoppopstack(popstack postack) //获取运算符栈顶元素

return postack->;;;opstack[postack->;;;top];

double gettoppdatastack(pdatastack pdstack) //获取运算数栈顶元素

return pdstack->;;;stack[pdstack->;;;top];

bool isop(char ch) //区分 运算符 和 运算数 的函数,是运算符时返回true,否则返回false

{ //判断是否为符号

if ( (ch == ) || (ch == -) || (ch == _) || (ch == /) || (ch == =) || (ch == a) || (ch == s) || (ch == a) || (ch == s) || (ch == () || (ch == )) )

return true;

else

return false;

char precede(char op1, char op2) //参考《数据结构》(c语言版)第53页 3.2.5表达式求值 表 3.1

char tab[9][10]; //定义字符串的二维数组来存放运算符优先级的关系

strcpy( tab[0], >;;;>;;;<<;<; );

strcpy( tab, >;;;>;;;<<;<; );

strcpy( tab, >;;;>;;;>;;;>;;;;<; );

strcpy( tab[3], >;;;>;;;>;;;>;;;;<; );

strcpy( tab[4], <<<<<=<

strcpy( tab[5], >;;;>;;;>;;;>;;;e>;;;>;;;>;;;>;;; );

strcpy( tab[6], >;;;>;;;>;;;>;;;;>;;;>;;;>;;; );

strcpy( tab[7], >;;;>;;;>;;;>;;;;>;;;>;;;>;;; );

strcpy( tab[8], <<<<

printf( | ___欢迎您的下次使用!谢谢!___ | ); //退出使用

printf( |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| );

double operate(double a, char theta, double b) //对出栈的运算符和运算数进行计算

double s;

switch(theta)

case :

s = a b;

break;

case -:

s = a - b;

case _:

s = a _ b;

case /:

if ( b != 0 ) //判断除数是否为0,若为0,退出程序

s = a/b;

printf( #### 除数为0,非法运算。程序终止! #### );

e_it_e; //打印结束菜单

case a:

s = fabs(b); //调用fabs函数

case s:

if( b >;;;= 0) //判断被开方数是否为0,若为0,退出程序

s = sqrt(b); //调用sqrt函数

printf( #### 求负数的平方根是非法运算。程序终止! #### );

return s;

char changechar(char c) //通过changechar函数来把a、s的小写字母改为大写的

if( c == a )

c = a;

else if( c == s )

c = s;

return c;

//参考《数据结构》(c语言版)第53页 3.2.5表达式求值算法3.4 evaluatee_pression_r函数

void evaluatee_pression_r //计算函数:读入表达式,并计算结果

popstack postack; //声明运算符栈

pdatastack pdstack; //声明运算数栈

double result; //存运算的结果

char _, theta, c; //c存放读取的字符,_、theta存放运算符栈的栈顶元素

int flag, data; //标识符,用来读入连续的数字

double getd; //存放gettop___的结果

double a, b, cc; //a,b存放数据栈出栈的栈顶元素, c存放运算结果

flag = 0; //初始化标识符,用来判断字符串中的连续数字

data = 0; //

initpopstack(postack); //初始化运算符栈

initpdatastack(pdstack); //初始化运算数栈

pushopstack(postack, =); //在运算符栈底放入=

printf( 请输入表达式以=结束:);

c = get); //读入字符

changechar(c); //通过调用函数来实现把小写的a、s改为大写的a、s

while( c != = || gettoppopstack(postack) != =)

{

if( !isop(c) ) //不是运算符进栈

{

s = c - 0; //把字符转化为数字

if ( flag == 1 )

{

popdatastack(pdstack, getd);

s = getd_10 s;

}

pushdatastack(pdstack, s);

flag = 1;

c = get);

changechar(c);

}

else

{

flag = 0;

switch( precede(gettoppopstack(postack), c) ) //输入元素和运算符栈顶元素比较

{

case <: //栈顶元素优先级低

pushopstack(postack, c);

c = get);

changechar(c);

break;

case =: //托括号并接受下一个字符

popopstack(postack, _);

c = get);

changechar(c);

break;

case >;;;: //退栈并将运算结果进栈

popopstack(postack, theta);

popdatastack(pdstack, b);

popdatastack(pdstack, a);

cc = operate(a, theta, b);

pushdatastack(pdstack, cc);

break;

}//switch

}//else

}//while

result = gettoppdatastack(pdstack); //运算结束时,运算数栈的栈底元素就是计算结果

clearpopstack(postack); //清空运算符栈

clearpdatastack(pdstack); //清空运算数栈

printf( ->;;;计算结果为:%.2f , result); //输出运算结果

return ;

}

void print_user //欢迎界面

{

printf( 欢迎使用c语言版模拟计算器 );

printf(________________________________________________________________________ );

printf( |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| );

printf( | 模拟计算器使用说明 | );

printf( | 作者:谢先斌 | );

printf( | 本程序包括对 、-、_、/、的运算 | );

printf( | 本程序中abs算用a替代、sqrt运算用s代替 | );

printf( | 本程序中的一切字母均不区分大小写 | );

printf( 正确的表达式如:1 a(7-8) s(9_8)= );

printf( | 输入=表示表达式输入结束! | );

printf( | 欢迎使用!-->;;;-->;;; | );

printf( |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| );

printf(________________________________________________________________________ );

}

int main //主函数

{

char in;

bool b; //标识符,用来标识是否结束程序

b = true; //初始化,不结束

print_user; //打印欢迎界面

printf( _请确认使用计算器y/n:);

while(1)

{

scanf(%c, in); //确认是否继续操作

get); //吃掉会车,避免干扰

switch(in)

{

case y:

case y:

{

evaluatee_pression_r; //进入计算函数:读入表达式,并计算结果

break;

}

case n:

case n:

{

e_it_e;

b = false;

break;

}

//default:

// printf( __输入错误,请重新输入y/n:);

// break;

}

if(b==false) //如果 b==false ,退出整个程序

break;

printf( _您确定要继续使用计算机y/n:);

get); //用getchar吃掉回车,避免对后续输入中in的干扰

}

return 0;

报告怎么写

有标题、作者信息、功能说明、代码分段展示、关键函数注释、运行效果截图(文字描述)。

《数据结构实验报告总结.doc》
将本文的Word文档下载,方便收藏和打印
推荐度:
点击下载文档

写数据结构实习报告常见误区

1 照搬教材公式,测试数据全用n=100这种假想值,不写机器配置,不提实际耗时波动。
2 只留最终正确代码,调试日志全删光,错误类型一笔带过,连warning都不提。
3 图单独占一页,文字在前一页写完,读者来回翻还对不上编号,最后干脆跳过图。
4 通篇“加深理解”“提升能力”“培养素养”,全是形容词堆砌,没一句具体动作、没一个真实场景。
5 图放章节末尾当摆设,编号对不上正文,箭头方向跟文字说的相反,连坐标轴都懒得标单位。

延伸阅读

相关分类 内容标题 说明
数据结构综合报告 数据结构实验报告 内容简介:一.实验内容:实现哈夫曼编码的生成算法。二.实验目的:1、使学生熟练掌握哈夫曼树的生成算法。2、熟练... [详情]
下一篇:

相关专题

分类查询入口

一键复制