栈和队列的基本操作实验报告.pdf

上传人:g****s 文档编号:86065206 上传时间:2023-04-13 格式:PDF 页数:19 大小:542.47KB
返回 下载 相关 举报
栈和队列的基本操作实验报告.pdf_第1页
第1页 / 共19页
栈和队列的基本操作实验报告.pdf_第2页
第2页 / 共19页
点击查看更多>>
资源描述

《栈和队列的基本操作实验报告.pdf》由会员分享,可在线阅读,更多相关《栈和队列的基本操作实验报告.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、.数据结构 实 验 报 告 一 软件 132 201300514211.徐蜀.实验二 栈和队列的基本操作及其应用 一、实验目的 1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。2、掌握栈和队列的特点,即后进先出和先进先出的原则。3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等运算在顺序存储结构和链式存储结构上的实现。二、实验内容 1回文判断 三、实验要求 1、按照数据结构实验任务书,提前做好实验预习与准备工作。2、加“*”题目必做,其他题目任选;多选者并且保质保量完成适当加分。3、严格按照数据结构实验报告模板和规范,及时完成实验报告。四、实验步骤(说明:依据实验内容

2、分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(函数)的伪码算法、函数实现、程序编码、调试与分析。附流程图与主要代码)、数据结构与核心算法的设计描述(程序中每个模块或函数应加注释,说明函数功能、入口及出口参数)1、栈的初始长度与需要再增加的长度#define STACK_INIT_SIZE 100;#define STACKINCREMENT 10;typedef char SElemType;/定义 SElemType 为 char 型 .2、栈的顺序存储表示 typedef struct SElemType*base;SElemType*top;int stacksize

3、;SqStack;3、队列的链式表示方法 typedef struct QNode SElemType data;struct QNode*next;QNode,*QueuePtr;typedef struct QueuePtr front;QueuePtr rear;LinkQueue;4、初始化栈./*函数功能:对栈进行初始化 参数:栈(SqStack&S)成功返回 1,否则返回 0 */int InitStack(SqStack&S)S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);/申请内存 if(!S.base)/

4、判断有无申请到空间 return ERROR;/没有申请到内存,返回 0 S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;5、入栈操作/*函数功能:将元素入栈 参数:栈(SqStack&S),插入元素 e 插入成功返回 1,否则返回 0 */int Push(SqStack&S,SElemType e)if(S.top-S.base=S.stacksize)/判断栈顶与栈底的差是否大于栈的/容量.S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SEl

5、emType);/栈满了,重新申请内存 if(!S.base)/判断是否申请成功 return ERROR;/不成功返回 0 S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;6、出栈操作/*函数功能:将栈中的元素弹出 参数:栈(SqStack&S),记录元素 e */int Pop(SqStack&S,SElemType&e)if(S.top=S.base)/判断栈是否为空 return ERROR;e=*(-S.top);return OK;.7、初始化队列 /*函数功能:初始化队列 参数:队列

6、(LinkQueue&Q)成功返回 1,否则返回 0 */int InitQueue(LinkQueue&Q)Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);/申请结点的内存 if(!Q.front)/判断有无申请到空间 return ERROR;/没有返回 0 Q.front-next=NULL;return OK;8.在队列队尾插入元素/*函数功能:在队列队尾插入元素 参数:队列(LinkQueue&Q),插入元素 e 成功返回 1,否则返回 0 */int EnQueue(LinkQueue&Q,QElemType e).p=(QueuePtr

7、)malloc(sizeof(QNode);/申请新的结点 if(!p)return ERROR;p-data=e;p-next=NULL;Q.rear-next=P;Q.rear=p;return OK;9.删除队头元素/*函数功能:删除对头元素 参数:队列(LinkQueue&Q),记录值 e 成功返回 1,否则返回 0 */int DeQueue(LinkQueue&Q,QElemType&e)if(Q.front=Q.rear)/判断队列是否为空 return ERROR;p=Q.front-next;e=p-data;Q.front-next=p-next;if(Q.rear=p).

8、Q.rear=Q.front;free(p);return OK;10、主函数 int main()SqStack S;/声明一个栈 LinkQueue Q;/声明一个队列 char m,k,c;int n=0,i,j,t=0,z=0;while(!t)cout 请输入你要判断回文的字符串,输入结束:;InitQueue(Q);InitStack(S);while(c=getchar()!=)/对字符的判断 不断输入字符 EnQueue(Q,c);Push(S,c);n+;.for(j=1;jn)/如果 j n 则说明全部相等 cout 这个字符串不是回文字符串 endl;else cout

9、这个字符串是回文字符串 endl;return 0;说明:通过调用序列号不同的函数进行各种操作。函数根据每次输入的数进行判断不在 110 内的函数将结束,否则将继续进行。程序调试及运行结果分析(应包含多组测试数据).五、实验总结 通过这次试验,我知道自己还有很多不足,还会犯一些细节上的错误,但是也因此对栈和队列的操作有了很好的认识 附录 1、程序流程图 开始 执行主函数 main.N Y N Y N Y 2、程序清单#include 声明一个栈S和队列Q!t(c=getchar()!=入栈入队列 j=1;j=n;j+出栈出队列,并判断值是否想等 判断是否是回文数,并输出判断语句 结束.#inc

10、lude using namespace std;/栈的表示和实现#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define ERROR 0#define OK 1 typedef char SElemType;typedef struct SElemType*base;SElemType*top;int stacksize;SqStack;/队列的表示和实现 typedef struct QNode SElemType data;.struct QNode*next;QNode,*QueuePtr;typedef struct Qu

11、euePtr front;QueuePtr rear;LinkQueue;/关于栈的函数 int InitStack(SqStack&S)S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)return ERROR;S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;int Push(SqStack&S,SElemType e).if(S.top-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S

12、.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base)return ERROR;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;int Pop(SqStack&S,SElemType&e)if(S.top=S.base)return ERROR;e=*(-S.top);return OK;./关于队列的函数 int InitQueue(LinkQueue&Q)Q.front=Q.rear=(QueuePtr)malloc(sizeof(QN

13、ode);if(!Q.front)return ERROR;Q.front-next=NULL;return OK;int EnQueue(LinkQueue&Q,SElemType e)QueuePtr p=(QueuePtr)malloc(sizeof(QNode);if(!p)return ERROR;p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;return OK;.int DeQueue(LinkQueue&Q,SElemType&e)if(Q.front=Q.rear)return ERROR;QueuePtr p=Q.front-next

14、;e=p-data;Q.front-next=p-next;if(Q.rear=p)Q.rear=Q.front;free(p);return OK;/主函数 int main()SqStack S;LinkQueue Q;char m,k,c;int n=0,i,j,t=0,z=0;while(!t).cout 请输入你要判断回文的字符串:endl;InitQueue(Q);InitStack(S);while(c=getchar()!=)/对字符的判断 不断输入字符 EnQueue(Q,c);Push(S,c);n+;for(j=1;jn)cout 这个字符串是回文字符串 endl;else cout 这个字符串不是回文字符串 endl;.return 0;

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

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

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

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