实验三 栈的基本运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三栈的基本运算
一、实验目的
1、掌握使用Turbo C(C++)上机调试栈的基本方法;
2、掌握栈的基本操作在链接存储结构上的运算。
二、实验要求
1、按实验内容编写实验的程序,主程序以菜单形式运行。
2、上机调试运行本程序。
3、保存和打印出程序的运行结果,并结合程序进行分析。
4、提交源程序和运行结果。
三、实验内容
1、利用栈实现进制转换。
2、利用栈实现判定表达式中括号是否匹配。
C++实验程序参见实验指导书和主教材随书光盘。
//SeqStack.h
#ifndef SEQSTACK_H
#define SEQSTACK_H
const int StackSize=10; //10只是示例性的数据,可以根据实际问题具体定义
template
class SeqStack
{
public:
SeqStack( ) ; //构造函数,栈的初始化
~SeqStack( ); //析构函数
int fun(char E[]); //判断是否为回文
int correct(char exp[]); //判断表达式括号是否匹配
void chang(int x,int r); //进制转换
private:
T data[StackSize]; //存放栈元素的数组
int top; //栈顶指针,指示栈顶元素在数组中的下标};
#endif
//SeqStack.cpp
#include "SeqStack3.h"
/*
* 前置条件:栈不存在
* 输入:无
* 功能:栈的初始化
* 输出:无
* 后置条件:构造一个空栈
*/
template
SeqStack
{
top=-1;
}
/*
* 前置条件:栈已存在
* 输入:无
* 功能:销毁栈
* 输出:无
* 后置条件:释放栈所占用的存储空间
*/
template
SeqStack
{
}
/*
* 前置条件:字符串、栈已存在
* 输入:无
* 功能:判断字符串是否为回文
* 输出:如果栈为回文,返回1,否则,返回0 * 后置条件:字符串、栈不变
*/
template
int SeqStack
{ int i=0;
top=-1; //栈初始化
while (E[i]!='\0') //将字符串依次入栈
{data[++top]=E[i++];
}
i=0;
while (E[i]!='\0' && top!=-1) //将字符串中字符依次与栈中字符进行比较{if(E[i]==data[top])
{i++;
top--;
}
else
break;
}
if(E[i]=='\0' && top==-1) return 1; //匹配成功,回文
else return 0; //匹配不成功,非回文
}
/*
* 前置条件:字符串、栈已存在
* 输入:无
* 功能:判断表达式(字符串)中括号是否匹配
* 输出:如果匹配返回1,否则,返回0
* 后置条件:字符串、栈不变
*/
template
int SeqStack
{
int i=0;
top=-1;
while(exp[i]!='\0')
{
switch(exp[i])
{
case '(':
data[++top]=exp[i++];
break;
case ')':
if(top!=-1) {top--;i++;}
else return 0;
break;
}
}
if(top==-1)
return 1;
else return 0;
}
/*
* 前置条件:栈已存在
* 输入:要转换的十进制整数x和转换的进制数r * 功能:将十进制整数x转换为r进制整数
* 输出:转换后的r进制整数
* 后置条件:栈不变
*/
template
void SeqStack
{
top=-1;
int k;
while (x!=0)
{
k=x%r;
data[++top]=k;
x=x/r;
}
while (top!=-1)
cout< } //SeqStackMain.cpp #include using namespace std; #include "SeqStack3.cpp" //引入成员函数文件 void main() { SeqStack char s='9'; int i,j; while(s!='0') { cout<<"1.判断括号是否匹配\n"<