数据结构:实验三:栈的操作

一、实验目的

(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.实验结果截图

如需源文件,请私信作者,无偿

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值