数据结构实验.doc

上传人:美****子 文档编号:58024975 上传时间:2022-11-06 格式:DOC 页数:13 大小:125.50KB
返回 下载 相关 举报
数据结构实验.doc_第1页
第1页 / 共13页
数据结构实验.doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《数据结构实验.doc》由会员分享,可在线阅读,更多相关《数据结构实验.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、数据结构实验报告实验序号:4 实验项目名称:栈的操作学号姓名专业、班实验地点指导教师实验时间一、实验目的及要求1. 熟悉栈的基本概念;2. 掌握栈的顺序存储结构;3掌握栈的应用。二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境。三、实验内容与步骤1.栈的顺序表表示和实现的如下:#include #define MaxSize 100using namespace std;typedef int ElemType;typedef structElemType dataMaxSize;int top;SqStack;

2、void InitStack(SqStack *st) /初始化栈st-top=-1;int StackEmpty(SqStack *st) /判断栈为空return (st-top=-1);void Push(SqStack *st,ElemType x) /元素进栈if(st-top=MaxSize-1)printf(栈上溢出!n);elsest-top+; /移动栈顶位置st-datast-top=x; /元素进栈void Pop(SqStack *st,ElemType &e) /出栈if(st-top=-1)printf(栈下溢出n);elsee=st-datast-top; /元素

3、出栈st-top-; /移动栈顶位置int main()SqStack L;SqStack *st=&L;ElemType e;int i;InitStack(st);for(i=1;i10;+i)Push(st,i);printf(入栈元素是:%dn,i);for(i=1;i10;+i)Pop(st,e);printf(出栈元素是:%dn,e);return 0; 改写以上程序,实现功能如下:1)调用栈操作函数实现判别一个算术表达式中的圆括号配对是否正确。2)改写Push和Pop函数,使得以上两个函数可以一次性将一个数组入栈和出栈。(1)(2)2.C/C+的库函数中已经实现了栈,实例如下:#

4、include /引入栈using namespace std;int main()int a;stacks;scanf(%d,&a);s.push(a); /入栈printf(%dn,s.top(); /取得栈顶元素输出s.pop(); /出栈return 0; 请根据以上程序,设计算法如下:判别一个算术表达式中的圆括号和方括号配对是否正确。四、分析与讨论五、教师评语签名:日期:成绩附源程序清单:1.(1)#include #define MaxSize 100#define SUCCESS 0#define ERROR -1typedef structint nDataMaxSize;in

5、t nTop;SqStack;void InitStack(SqStack *PST_List) /初始化栈PST_List -nTop = -1;int StackEmpty(SqStack *PST_List) /判断栈为空if (PST_List -nTop = -1)return ERROR;elsereturn SUCCESS;void Push(SqStack *PST_List, int nData) /元素进栈if (PST_List -nTop = MaxSize - 1)printf(栈上溢出!n);elsePST_List -nTop+; /移动栈顶位置PST_List

6、-nDataPST_List-nTop = nData; /元素进栈void Pop(SqStack *PST_List, int *pnData) /出栈if (PST_List -nTop = -1)printf(栈下溢出n);elsepnData = &PST_List -nDataPST_List -nTop; /元素出栈PST_List -nTop-; /移动栈顶位置int GetTop(SqStack *PST_List) /获取栈顶if ( ! StackEmpty(PST_List) ) /先判断是否为空栈,不是空栈则返回栈顶return (PST_List-nDataPST_

7、List -nTop);elsereturn ERROR;int JudgeBrackets(SqStack *PST_List) /判断圆括号是否配对成功char cData;/输入变量int nSign = 0;/判断标志int *pnData = NULL;/传入pop中的参数printf(请输入一个表达式:);cData = getchar();while (cData != n) /按下回车结束死循环switch (cData)case (: /对于左括号就入栈Push(PST_List, (int)cData); break;case ):if (GetTop(PST_List)

8、= () /栈顶有左括号就出栈Pop(PST_List, pnData);else /否则就将判断标志置1nSign = 1;break;default: /对于其他的输入不做操作 break;cData = getchar();if (GetTop(PST_List) = () /结束输入后判断栈顶是否还有左括号nSign = 1;if (nSign = 1)printf(圆括号配对不成功!n);elseprintf(圆括号配对成功!n);return SUCCESS;int main()SqStack ST_List;SqStack *PST_List = &ST_List;/int nD

9、ata;/int nIndex;InitStack(PST_List);JudgeBrackets(PST_List);/*for(nIndex = 1; nIndex 10; +nIndex)Push(PST_List, nIndex);printf(入栈元素是:%dn, nIndex);for(nIndex = 1; nIndex nTop = MaxSize - 1)printf(栈上溢出!n);elseif( ( MaxSize - PST_List -nTop - 1) = nLength) /判断栈剩余空间是否大于要入栈的元素个数for(nIndex = 0; nIndex nTo

10、p+; /移动栈顶位置 PST_List -nDataPST_List-nTop = pnDatanIndex; /元素进栈printf(入栈元素为: %d n, PST_List -nDataPST_List-nTop);printf(元素进栈成功!n);else /栈空间小于要入栈元素的个数,只入栈剩余空间大小的元素个数printf(栈空间只剩 %d 个, 而数组元素有 %d 个,所以只入栈 %d 个!n, (MaxSize - PST_List -nTop -1 ), nLength, (MaxSize - PST_List -nTop - 1);nLength = MaxSize -

11、PST_List -nTop - 1; /长度赋值为剩余空间大小for(nIndex = 0; nIndex nTop+; /移动栈顶位置 PST_List -nDataPST_List-nTop = pnDatanIndex; /元素进栈printf(入栈元素为: %d n, PST_List -nDataPST_List-nTop);printf(元素进栈成功!n);void Pop(SqStack *PST_List, int *pnData, int nLength) /出栈int nIndex = 0 ;if (PST_List -nTop = -1)printf(栈下溢出n);el

12、seif( nLength nTop + 1)/要出栈元素个数小于当前栈顶for(nIndex = 0; nIndex nDataPST_List -nTop; /元素出栈printf(出栈元素是:%dn, PST_List -nDataPST_List -nTop); PST_List -nTop-; /移动栈顶位置printf(元素出栈成功!n);else /要出栈元素个数大于当前栈顶,把栈内全部元素出栈nLength = PST_List -nTop + 1;for(nIndex = 0; nIndex nDataPST_List -nTop; /元素出栈printf(出栈元素是:%dn

13、, PST_List -nDataPST_List -nTop); PST_List -nTop-; /移动栈顶位置printf(元素出栈成功!n);2.#include /引入栈#includeusing namespace std;int main()char cBuff;int nSign = 0; /判断标志,初值为0stackStList;printf(输入表达式,以 # 号结束输入!n);doscanf(%c, &cBuff);switch (cBuff)case :StList.push(cBuff); /入栈/printf(入栈:%cn, cBuff);break;case (

14、:StList.push(cBuff); /入栈/printf(入栈:%cn, cBuff);break;case ):if(StList.empty() /对于一开始就输入)的情况作出判断,直接配对失败 nSign = -1;elseif (StList.top() = () /取得栈顶元素输出 /出栈 /printf(出栈:%cn, StList.top(); StList.pop(); else nSign = -1; break;case :if(StList.empty() /对于一开始就输入的情况作出判断,直接配对失败 nSign = -1;elseif (StList.top() = ) /取得栈顶元素输出 /出栈 /printf(出栈:%cn, StList.top(); StList.pop();elsenSign = -1;break;default: break;if (nSign = -1)break;while(cBuff != #);if (!StList.empty() /调用判空函数,看是否栈中还有( nSign = -1;if (nSign = 0)printf(配对成功!n);elseprintf(配对失败!n);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 文案大全

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁