实验二 栈和队列的基本操作及其应用
更新时间:2023-05-26 19:30:01 阅读量: 实用文档 文档下载
- 实验二小推荐度:
- 相关推荐
实验二 栈和队列的基本操作及其应用
一、实验内容
回文判断
[问题描述]
对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。
[基本要求]
(1)数据从键盘读入; (2)输出要判断的字符串;
(3)利用栈的基本操作对给定的字符串判断其是否是回文,
若是则输出“Yes”,否则输出“No”。
二、概要设计 算法设计:
实验要求用栈的基本基本操作实现判断是否为回文,则必须定
义栈的初始化和出栈、入栈;另外为了判断是否是回文,则定义一个数组,便于比较。在字符串输入的时候,保证同时进入数组和栈里。因为栈的后进先出的输出特性,在比较的时候,用while语句判断:当栈输出的元素和数组的对应的元素相等,就继续比较,直到比较完毕,相等则输出YES,在比较的过程中,若有一个不相等,则输出NO。而判断while语句结束的条件有两个:一是在比较的过程中,如果有不相等的两个元素,输出“NO”,跳出while语句;二是正常结束,即字符串和栈里储存的元素完全相等,则输出YES。
流程图:
计科 092
刘亚红
20090814212
开始
定 义 数 组 初始化栈
输入字符c
s!='#' 否 是 将字符同时进入 数组和栈
输入字符c i加1
栈为不空 否 是
出栈的元素和数 组第j个元素相等
否 是 j++
输出NO
结束
输出YE
算法:
模块:
在分析了实验要求和进行了算法分析之后,可以将程序分成五
个功能函数,分别如下: 首先定义一个栈: typedef struct{ SElemType *base; SElemType *top; int stacksize; }Sqstack;
Initstack(Sqstack &S):构造一个空栈,便于存储元素,即栈的初始化:
S.base=(SElemType*)malloc(MAX*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base;
S.stacksize=MAX; return OK;
Push(Sqstack &S, SElemType e):实现插入元素e成为新的栈顶元素。在程序里它实现了将元素输入到栈里的功能。 char Push(Sqstack &S, SElemType e)
{
if(S.top-S.base>=S.stacksize) {//栈满,追加存储空
S.base=(SElemType*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT; }//
*S.top=e; S.top++; return OK;
Pop(Sqstack &S):该函数是删除栈S的栈顶元素。在程序里,充当了输出栈里元素的功能。便于和字符串的元素比较: char Pop(Sqstack &S) {
if(S.top==S.base) return 0; else
return *--S.top; }
Isempty(Sqstack S):该函数是判断栈里是否还有元素。在主函数里while判断语句里充当重要的作用是判断while语句执行与否的条件,当栈不为空的时候,就执行while语句,为空的时候就执行if语句输出YES: if(S.base==S.top) return 0;
int main(void):这是程序的主要部分。在主函数里,定义了一
个数组。在输入元素的时候要同时输入数组和栈里,便于以后的操作: cin>>s; while(s!='#') {//字符串入栈 Input[i]=s;
Push(S,s); cin>>s; i++; }
千万要记得在while语句的结束要再输入元素,否则这个输入就无效了。接下来就是最重要的部分,判断是否是回文,利用while循环惊醒判断: while(Isempty(S))
{//字符依次出栈和字符数组比较,判断是否回文数 if(Pop(S)==Input[j]) { j++; } else {
cout<<"NO"<<endl; break; } }
if(!Isempty(S))
cout<<"YES"<<endl;
特别需要注意的是,循环语句的判断条件Isempty(S)的使用。三 、测试数据
测试一:ABBA# 测试二:ABCD# 四、结果调试 测试一的结果
:
测试二的结果:
五.总结
通过这次实验,复习了栈的几种基本操作。在编程的过程中,遇到了种种的问题:刚开始,自己采用了栈和数组的形式,可是却在键盘输入元素是遇到问题,不知道该如何解决,直到询问同学之后才明白。但是就算自己编程没错误,可是在测试的时候,一直输出是回文的字样,不知道错误出现在哪,没办法就一步一步的试,才知道是循环条件出现了毛病。修改之后,才运行成功。 在这次实验过后,我明白我们的语言描述和C语言描述就算有一点的差别,就会导致不同的结果,所以在编程的过程中,要谨慎、小心,才不会出错。 六、附录:
#include<iostream.h> #include<stdlib.h> #include<string.h>
typedef char SElemType;
#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0
#define OVERFLOW 0 #define MAX 100
typedef char SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }Sqstack;
char Initstack(Sqstack &S) {////////
S.base=(SElemType*)malloc(MAX*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base;
S.stacksize=MAX;
return OK; }
///////////////////////////////为栈插入元素 char Push(Sqstack &S, SElemType e) {
if(S.top-S.base>=S.stacksize) {
S.base=(SElemType*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT; }
*S.top=e; S.top++; return OK; }
//////////////////////////删除栈顶元素 char Pop(Sqstack &S) {
if(S.top==S.base) return 0; else
return *--S.top; }
////////////////////////////////////判空 bool Isempty(Sqstack S) {
if(S.base==S.top) return 0; }
int main(void) {
char s,Input[MAX]; Sqstack S;
int i=0; int j=0;
Initstack(S);//初始化栈 cin>>s;
while(s!='#') {//字符串入栈 Input[i]=s; Push(S,s); cin>>s; i++; }
while(Isempty(S))
{//字符依次出栈和字符数组比较,判断是否回文数 if(Pop(S)==Input[j]) { j++; } else {
cout<<"NO"<<endl; break; } }
if(!Isempty(S))
cout<<"YES"<<endl; return OK; }
正在阅读:
实验二 栈和队列的基本操作及其应用05-26
紧急疏散应急预案01-03
桥梁工程专项安全施工方案08-30
003汽车吊(十堰恒大城二期(1#、2#、3#、6#楼)主体及配套建设工程)10-31
自由作文500字07-06
浙江广播电视大学07-26
2017年融合蛋白行业分析报告05-07
名人名言之奥黛丽赫本的名言40条03-23
《说文解字》无从属字部首浅谈08-05
2010年度妇幼保健工作总结05-19
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 基本操作
- 队列
- 及其
- 实验
- 应用
- 伟创变频器AC20说明书
- 如何设计全自动电脑碳硫联测分析仪项目可行性研究报告(技术工艺+设备选型+财务概算+厂区规划)标准方案
- “可靠性”与“如实反映”谁更适用——FASBIASB联合框架下的讨论
- BS5852阻燃面料标准测试
- 做好新员工入职培训、为企业发展提供人才储备
- simetrix_simplis仿真软件入门简介
- 皮肤撕脱伤病人标准护理计划
- 自考2324离散数学第四章课后答案
- 2016年福建省高考英语第一次模拟试题及答案
- 铸轧铝板的组织及其缺陷_1_
- 变形铝合金的基本性能及分类(超全)
- 高中语文必修2默写练习
- 钛合金的特性及未来发展趋势
- 小吃技术3000项广告稿
- 2011至2013年国家公务员考试常识题型分析
- lambda red-mediated genetic manipulation of antibiotic-producing Streptomyces
- 物理效应的模拟与仿真
- 2021年上海市七年级数学期末复习-七年级上学期期末全真模拟03(教师版)
- 0907现代教育技术
- 地面光伏土地租赁合同范本