logo资料库

栈和队列的基本操作实现及其应用实验报告.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
栈和队列的基本操作实验报告
一、实验目的
二、实验内容
三、实验步骤
四、主要算法流程图及程序清单
栈和队列的基本操作实验报告 一、实验目的 1、熟练掌握栈和队列的基本操作在两种存储结构上的实现。 2、会用栈和队列解决简单的实际问题。 二、实验内容 题目:试写一个算法,判断依次读入的一个以@为结束符的字符序列,是否为回文。 所谓“回文“是指正向读和反向读都一样的一字符串,如“321123”或“ableelba”。 设计相关函数声明: 判断函数:int IsReverse() 栈:int InitStack(SqStack &S ) int Push(SqStack &S, SElemType e ) int Pop(SqStack &S,SElemType &e) int StackEmpty(s) 三、实验步骤 ㈠、数据结构与核心算法的设计描述 相关常量及结构定义: # define STACK_INIT_SIZE 100 # define STACKINCREMENT 10 # define OK 1 # define ERROR 0 struct stack //栈类型定义 { char *base; char *top; }st; Struct queue { Char *front; Char *rear; //队列定义
}q; ㈡、函数调用及主函数设计 开始 主函数 构建栈函数 构建队列函数 输入字符 判 断 字 符 是否为@ 否 是 字符出栈函数 字符出队函数 否 判 断 输 出 字 符是否相等 否 是 判断字符串是 否输出完毕 是 Return OK Return ERROR 结束 函数调用及主程序设计图 ㈢ 程序调试及运行结果分析 这次实验给了我一个很深刻的教训,我的程序写出来之后基本上没有什么问题,编译 运行都没错,但由于没有经过充分的测试,只用几个“回文”测试了一下,输出结果正确, 结果一个室友帮我调试程序的时候,用一个非回文的字符串试了一下,输出结果也是回文, 我找毛病找了将近一天,终于找到源代码错在哪儿了,原来我把栈和队列都当成栈来处理了。 纠正这个错误之后,程序的结果正确了。 ㈣ 实验总结
通过这次实验,我对栈和队列的区别和用法更加深入的理解,这是我最大的收获。先 前对栈和队列的认识过于狭隘,而且对其用法很不熟练,只是模糊地知道该怎样操作,但没 有真正的尝试过,这次实验使我受益匪浅。通过这次实验,我深刻的意识到程序必须用尽可 能多的测试用例测试,而且测试用例的涵盖面要尽可能广,这样才能保证程序的可靠性。我 会再接再厉,争取在以后的实验中有更大的进步。 四、主要算法流程图及程序清单 1、主要算法流程图: 开始 从栈尾输出一个字符 从队列头输出一个字符 否 判 断 这 俩 字 符是否相等 是 Return ERROR 判断字符串是 否输出完毕 否 是 Return OK 结束 回文判定函数设计流程图 2、程序清单 #include # define INIT_SIZE 100 # define INCREMENT 10 # define OK 1 # define ERROR 0 #include #include char e,*c1,*c2; struct stack //栈定义
{ char * base; char * top; }st; struct queue { char* front; char* rear; }q; void initst() { c2=st.base=new char[INIT_SIZE]; if(st.base) { cout<<"构建栈成功!"<=INIT_SIZE) { q.rear=(char*)realloc(q.rear,INCREMENT); if (!q.rear) { cout<<"内存分配失败!"<
return OK; } int deleteq() { char b; if (q.rear==q.front) { cout<<"队列输出完毕!"<=INIT_SIZE) { //从队头删除一个字符 //让输入的字符入队列 st.base=(char *)realloc(st.base,(INIT_SIZE+INCREMENT)*sizeof(char)); if(!st.base) { cout<<"内存分配失败!"<
while ((e=getchar())!='@')//输入字符串,若输入的字符为“@”,则字符串输入结束 { enterq(); push(); //让输入的字符入队 //让输入的字符串进栈 //让字符串出栈出队,并对字符进行比较,若字符不相 等或字符串输出完毕,则程序结束,并释放分配的内 存空间。 } while(q.front!=q.rear) { a=pop(); b=deleteq(); if (a!=b) { cout<<"YES "<
分享到:
收藏