一、实验目的
(1)领会栈的存储结构特点
(2)掌握栈中的各种基本运算算法设计, 并实现简单程序设计
二、实验要求
实现顺序栈的定义,头文件命名”sqstack.h”。 利用所定义的顺序栈,设计一个算法实现一个字符串是否对称的判断。
三、实验环境
Windows+DEV C++( 或者其他编译工具)
四、实验步骤及结果
1. 顺序栈类型声明:
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;//栈顶指针
}SqStack;//定义顺序栈类型
2.顺序栈基本运算算法设计
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
//销毁栈
void DestroyStack(SqStack *&s)
{
free(s);
}
//判断栈是否为空
bool StackEmpty(SqStack *s)
{
return(s->top==-1);
}
//进栈
bool Push(SqStack *&s,ElemType e)
{
if(s->top==MaxSize-1)//栈满(栈上溢出)
return false;
s->top++;//栈顶指针加一
s->data[s->top]=e; //元素e放栈顶指针处
return true;
}
//出栈
bool Pop(SqStack *&s,ElemType &e)
{
if(s->top==-1)//栈空(栈下溢出)
return false;
e=s->data[s->top];//取栈顶指针元素
s->top--;//栈顶指针减一
return true;
}
//判断一个字符串是否为对称串
bool symmetry(string str)
{
ElemType e;
SqStack *st;
InitStack(st); //初始化栈
//元素进栈
for(int i=0;i<str.length();i++){
Push(st,str[i]);
}
//比较栈中元素和字符串
for(int i=0;i<str.length();i++){
Pop(st,e); //出栈,e存放的是当前栈顶元素
if(e!=str[i]){ //不同
DestroyStack(st); //销毁栈
return false;
}
}
DestroyStack(st);
return true;
}
sqstack.h:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
#define MaxSize 100
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;//栈顶指针
}SqStack;//定义顺序栈类型
//初始化栈
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
//销毁栈
void DestroyStack(SqStack *&s)
{
free(s);
}
//判断栈是否为空
bool StackEmpty(SqStack *s)
{
return(s->top==-1);
}
//进栈
bool Push(SqStack *&s,ElemType e)
{
if(s->top==MaxSize-1)//栈满(栈上溢出)
return false;
s->top++;//栈顶指针加一
s->data[s->top]=e; //元素e放栈顶指针处
return true;
}
//出栈
bool Pop(SqStack *&s,ElemType &e)
{
if(s->top==-1)//栈空(栈下溢出)
return false;
e=s->data[s->top];//取栈顶指针元素
s->top--;//栈顶指针减一
return true;
}
//判断一个字符串是否为对称串
bool symmetry(string str)
{
ElemType e;
SqStack *st;
InitStack(st); //初始化栈
//元素进栈
for(int i=0;i<str.length();i++){
Push(st,str[i]);
}
//比较栈中元素和字符串
for(int i=0;i<str.length();i++){
Pop(st,e); //出栈,e存放的是当前栈顶元素
if(e!=str[i]){ //不同
DestroyStack(st); //销毁栈
return false;
}
}
DestroyStack(st);
return true;
}
3. 编写程序exp3-1.cpp,完成实验要求中的功能
exp3-1.cpp:
#include"sqstack.h"
int main()
{
string str;
cout<<"str:";
cin>>str;
bool flag;
//判断是否为对称串
flag=symmetry(str);
if(flag)
cout<<str<<"-->"<<"Yes"<<endl;
else
cout<<str<<"-->"<<"N0"<<endl;
}
4.实验结果截图
如需源文件,请私信作者,无偿