2023年课程实验报告2

上传人:豆*** 文档编号:166333324 上传时间:2022-10-31 格式:DOC 页数:8 大小:1,002.50KB
返回 下载 相关 举报
2023年课程实验报告2_第1页
第1页 / 共8页
2023年课程实验报告2_第2页
第2页 / 共8页
2023年课程实验报告2_第3页
第3页 / 共8页
点击查看更多>>
资源描述
课 程 实 验 报 告 专 业 年 级 2023级软件工程 课 程 名 称 数据结构C语言描述 指 导 教 师 申红婷 学 生 姓 名 王晓霞 学 号 02 实 验 日 期 2023.11.7 实 验 地 点 A3笃行楼A栋306 实 验 成 绩 教务处制 2023年10月07日实验项目名称栈和队列实验实验目的及规定一目的: 使学生对栈和队列的顺序存储结构和链式结构、基本操作和应用,能通过实验达成掌握和应用的目的。 规定学生对栈和队列的顺序存储结构和链式结构的基本操作均作验证性实验,对栈和列的应用各作一个设计性实验,并写出实验报告。二规定: 实验前认真预习实验内容,实验时自觉遵守课堂纪律,严格按操作规程操作,既要独立操作又要与其他同学配合,在实验过程中必须按照实验内容认真做完实验,并认真填写相关实验报告。实验内容栈和队列的顺序存储结构和链式结构、基本操作和应用。实验环节1、阅读下面程序,将函数Push和函数Pop补充完整。规定输入元素序列1 2 3 4 5 e,运营结果如下所示。#include#include#define ERROR 0#define OK 1#define STACK_INT_SIZE 10 /*存储空间初始分派量*/#define STACKINCREMENT 5 /*存储空间分派增量*/typedef int ElemType; /*定义元素的类型*/typedef struct ElemType *base; ElemType *top; int stacksize; /*当前已分派的存储空间*/SqStack;int InitStack(SqStack *S); /*构造空栈*/int push(SqStack *S,ElemType e); /*入栈*/int Pop(SqStack *S,ElemType *e); /*出栈*/int CreateStack(SqStack *S); /*创建栈*/void PrintStack(SqStack *S); /*出栈并输出栈中元素*/int InitStack(SqStack *S) S-base=(ElemType *)malloc(STACK_INT_SIZE*sizeof(ElemType); if(!S-base) return ERROR; S-top=S-base; S-stacksize=STACK_INT_SIZE; return OK;/*InitStack*/int Push(SqStack *S,ElemType e) if (S-top-S-base=S-stacksize) S-base=(ElemType*)realloc( S-base,(S-stacksize+STACKINCREMENT)*sizeof(ElemType) ); S-top=S-base+S-stacksize; S-stacksize+=STACKINCREMENT; *S-top+=e; return 1;/*Push*/int Pop(SqStack *S,ElemType *e) if (S-top!=S-base) *e=*-S-top; return 1; else return 0;/*Pop*/int CreateStack(SqStack *S)int e; if(InitStack(S) printf(Init Success!n); else printf(Init Fail!n); return ERROR; printf(input data:(Terminated by inputing a character)n); while(scanf(%d,&e) Push(S,e); return OK;/*CreateStack*/void PrintStack(SqStack *S) ElemType e; while(Pop(S,&e) printf(%3d,e);/*Pop_and_Print*/int main() SqStack ss; printf(n1-createStackn); CreateStack(&ss); printf(n2-Pop&Printn);PrintStack(&ss);printf(n); return 0; l 算法分析:输入元素序列1 2 3 4 5,为什么输出序列为5 4 3 2 1?体现了栈的什么特性? 程序运营结果如下图所示:由于当main函数调用PrintStack(&ss)时,程序转到函数体中,而在该函数体内,又调用了int Pop(SqStack *S,ElemType *e),此函数的功能是栈S的栈顶元素退栈并返回其值。所以输入元素序列1 2 3 4 5,输出序列为5 4 3 2 1。而这则体现了栈是只允许在表的一端进行操作的线性表并且具有先进后出的特性。 2、在第1题的程序中,编写一个十进制转换为二进制的数制转换算法函数(规定运用栈来实现),并验证其对的性。l 实现代码void conveshen(SqStack *S) ElemType n,h; int m=0,k=0; InitStack(S); printf(Input elementn); scanf(%d,&n); while(n) m+; Push(S,n%2); n=n/2; while(km) k+; Pop(S,&h); printf(%d,h); int main() SqStack S; conveshen(&S); printf(n); return 0; l 验证 3、阅读并运营程序,并分析程序功能。#include#include#include#define M 20#define elemtype chartypedef struct elemtype stackM; int top;stacknode;void init(stacknode *st);void push(stacknode *st,elemtype x);void pop(stacknode *st);void init(stacknode *st) st-top=0;void push(stacknode *st,elemtype x) if(st-top=M) printf(the stack is overflow!n); else st-top=st-top+1; st-stackst-top=x; void pop(stacknode *st)if(st-top0) st-top-; else printf(“Stack is Empty!n”);int main() char sM; int i; stacknode *sp; printf(create a empty stack!n); sp=malloc(sizeof(stacknode); init(sp); printf(input a expression:n); gets(s); for(i=0;itop=0) printf(match)!n); else printf(not match)!n); return 0;输入:2+(c-d)*6-(f-7)*a)/6运营结果:输入:a-(c-d)*6-(s/3-x)/2运营结果:程序的基本功能: 判断所输入多项式的左右括号是否配对。实验环境(一)运营环境说明PC计算机,Windows 2023(或Windows XP) 及以上版本,C(二)基础数据设立及说明计算机,Windows 2023(或Windows XP) 及以上版本,C均能正常运营。实验结果与分析通过这次实验,我已经基本掌握了本章的学习要点和实验的基本规定以及目的。第一个程序填空题使我学会了栈和队列的结构定义,逻辑特性及其基本操作的使用。而第二个程序分析则使我明白了栈和队列的顺序存储表达和链式存储表达,这使得我懂得了该在什么情况下分别实用两种存储表达并用程序代码实现它们相应的操作。虽然我最终顺利完毕了实验,但是在实验过程中我也碰到了许多问题,比如说,不清楚栈和队列的结构定义以至于在后续过程中无法使用站和队列,导致了极大的麻烦,尚有在实现某些操作时,无法用程序代码将其顺利运营。然而碰到问题我并没有退缩,我努力去图书馆查阅资料并且请教老师同学,最终将这些问题各个击破。与此同时,我也取得了极大的进步。总而言之,这次有关栈和队列的实验使我受益匪浅,弄明白了许多曾经模糊的知识点,也学会了许多以前并不知道的知识。教师评语注:可根据实际情况加页
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 幼儿教育


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!