实验三 栈的基本运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 //定义模板类SeqStack

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::SeqStack( )

{

top=-1;

}

/*

* 前置条件:栈已存在

* 输入:无

* 功能:销毁栈

* 输出:无

* 后置条件:释放栈所占用的存储空间

*/

template

SeqStack::~SeqStack( )

{

}

/*

* 前置条件:字符串、栈已存在

* 输入:无

* 功能:判断字符串是否为回文

* 输出:如果栈为回文,返回1,否则,返回0 * 后置条件:字符串、栈不变

*/

template

int SeqStack::fun(char E[])

{ 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:: correct(char exp[])

{

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:: chang(int x,int r)

{

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 b; //创建模板类的实例SeqStack a; //创建模板类的实例

char s='9';

int i,j;

while(s!='0')

{

cout<<"1.判断括号是否匹配\n"<

相关文档
最新文档