实验三--顺序栈操作实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验三顺序栈操作实现实验日期:2017年4月1日实验目的及要求1.熟练掌握栈的结构,以及这种数据结构的特点;2.能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法。实验内容已知顺序栈的类型定义如下:#defineMAX100typedefchardatatype;typedefstruct{datatypedata[MAX];inttop;}SeqStack,*SeqStackptr;任务1.题目要求任务一:创建自定义头文件seqStack.h,包含顺序栈的数据类型定义及基本操作函数,需定义的基本操作如下:(1)voidError(char*s);/*自定义错误处理函数*/(2)voidInitStack(SeqStackptrsp);/*初始化栈——置空栈*/(3)intEmptyStack(SeqStackptrsp);/*判栈空*/(4)intFullStack(SeqStackptrsp);/*判栈满*/(5)voidPush(SeqStackptrsp,datatypex);/*进栈(元素压入栈顶)*/(6)datatypePop(SeqStackptrsp);/*出栈(元素从栈顶弹出)*/(7)datatypeGetTop(SeqStackptrsp);/*读栈顶元素(不出栈)*/(8)intCount(SeqStackptrsp);/*计算栈中元素个数*/任务二:创建一个新的程序文件sy13.cpp,请调用seqStack.h提供的顺序栈操作的函数完成把源文本文件中的所有十进制数转换成相应的指定进制的数值存于新的文本文件中,要求定义如下函数:(1)voidTrans(intn,intr,charstr[])功能:把n整数转换为r进制的值并存于str数组中;(2)voidTransFile(intr,charstrin[],charstrout[]);功能:把strin文件中十进制整数转换为r进制的值并存于文件strout中。其中strin和strout字符数组中分别存放源文件名和目标文件名。(思路:1.以只读方式打开strin中的文件,以只写方式打开存于strout中的文件2.循环读取strin文件(1)读一个整数到变量num中(2)调用Trans函数将num转换为r进制的字符串result(3)将字符串result写入到文件strout中3.关闭strin文件,strout文件。)(3)main函数中准备指定进制r的值,源文件名和目标文件名,调用TransFile函数完成相应要求。2.请回答下列问题(1)栈是限定在表的一端进行插入或删除操作的线性表,其操作原则是后进先出。(2)一个不带表头结点链栈的栈顶指针是top,每个结点包含值域data和指针域next,判断栈空的条件为top==NULL,当p所指向的结点入栈,首先执行判断栈是否满,然后执行p-data[p-top++]=x操作。(3)设数组S[100]存储一个顺序栈的元素,变量top指示下一个入栈元素在数组中的下标位置,栈为空的条件是top-1==NULL,栈为满的条件是top=100。3.seqStack.h及sy13.cpp源程序清单(含必要的注释)SeqStack.h:#includestdio.h#includestdlib.h#defineMAX100typedefchardatatype;typedefstruct{datatypedata[MAX];inttop;}SeqStack,*SeqStackptr;SeqStacks;SeqStackptrsp;voidError(char*s);/*自定义错误处理函数*/voidInitStack(SeqStackptrsp);/*初始化栈——置空栈*/intEmptyStack(SeqStackptrsp);/*判栈空*/intFullStack(SeqStackptrsp);/*判栈满*/voidPush(SeqStackptrsp,datatypex);/*进栈(元素压入栈顶)*/datatypePop(SeqStackptrsp);/*出栈(元素从栈顶弹出)*/datatypeGetTop(SeqStackptrsp);/*读栈顶元素(不出栈)*/intCount(SeqStackptrsp);/*计算栈中元素个数*/voidError(char*s)/*自定义错误处理函数*/{printf(\n%s,s);exit(1);/*返回OS,该函数定义在stdlib.h中*/}voidInitStack(SeqStackptrsp)/*初始化栈——置空栈*/{sp-top=0;}intEmptyStack(SeqStackptrsp)/*判栈空*/{returnsp-top==0;/*返回值为1,栈空;返回值为0,栈不空*/}intFullStack(SeqStackptrsp)/*判栈满*/{returnsp-top=MAX;/*返回值为1,栈满;返回值为0,栈不满*/}voidPush(SeqStackptrsp,datatypex)/*进栈(元素压入栈顶)*/{if(FullStack(sp)){/*若栈满*/Error(StackFull);}sp-data[sp-top]=x;sp-top++;}datatypePop(SeqStackptrsp)/*出栈(元素从栈顶弹出)*/{if(EmptyStack(sp)){/*若栈空*/Error(StackEmpty);}sp-top--;returnsp-data[sp-top];}datatypeGetTop(SeqStackptrsp)/*读栈顶元素(不出栈)*/{if(EmptyStack(sp)){/*若栈空*/Error(StackEmpty);}returnsp-data[sp-top-1];}intCount(SeqStackptrsp)/*计算栈中元素个数*/{returnsp-top;}sy13.cpp:#includeseqStack.hvoidTrans(intn,intr,charstr[]);/*把n整数转换为r进制的值并存于str数组中*/voidTransFile(intr,charstrin[],charstrout[]);/*把strin文件中十进制整数转换为r进制的值并存于文件strout中。其中strin和strout字符数组中分别存放源文件名和目标文件名*/voidmain(){intr;chars[MAX],t[MAX];printf(请输入进制r的值:);scanf(%d,&r);TransFile(r,s,t);}voidTrans(intn,intr,charstr[]){/*把n整数转换为r进制的值并存于str数组中*/inti,c;SeqStacks;InitStack(&s);do{c=n%r;if(c10){c=c+'0';}else{c=c-10+'a';}Push(&s,c);}while(n/=r);i=0;while(!EmptyStack(&s)){str[i++]=Pop(&s);}str[i]='\0';}voidTransFile(intr,charstrin[],charstrout[]){/*把strin文件中十进制整数转换为r进制的值并存于文件strout中。其中strin和strout字符数组中分别存放源文件名和目标文件名*/intnum,i,n;charresult[MAX];FILE*fin;FILE*fout;if((fin=fopen(D:/strin.txt,r))==NULL){Error(Cannotopenfile!);}if((fout=fopen(D:/strout.txt,w))==NULL){Error(Cannotopenfile!);}fprintf(fout,源数据转化为%d进制后为:\n,r);while(!feof(fin)){fscanf(fin,%d,&num);Trans(num,r,result);fprintf(fout,%s,result);}fclose(fin);fclose(fout);}4.源文本文件的内容,程序执行后目标数据文件的内容实验总结分析(本程序的重点与难点,调试中出现的问题及解决方法等)

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功