`
trix
  • 浏览: 82572 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

堆栈基本操作3

J# 
阅读更多
题目要求:

1、设栈采用顺序存储结构(用动态数组),请编写栈的各种基本操作的实现函数,并存放在头文件test7.h中。同时建立一个验证操作实现的主函数文件test7.cpp,编译并调试程序,直到正确运行。  
提示:
⑴ 栈的动态数组顺序存储结构可定义如下:
struct Stack {
    ElemType *stack ;   // 存栈元素
    int top;              // 栈顶指示器
    int MaxSize;            // 栈的最大长度
};
⑵ 栈的基本操作可包括:
① void InitStack (Stack &S);    //构造一个空栈 S
② int EmptyStack (Stack S);   //若栈S为空栈返回1,否则返回0
③ void Push(Stack &S, ElemType item);   //元素 item进栈
④ ElemType Pop(Stack &S);    //栈S的栈顶元素出栈并返回
⑤ ElemType Peek(Stack S);   //取栈S的当前栈顶元素并返回
⑥ void ClearStack (Stack &S);   //清除栈s,使成为空栈

2、应用:写一函数,判断给定的字符串是否中心对称。如字符串“abcba”、“abccba”均为中心对称,字符串“abcdba”不中心对称。要求利用test7.h中已实现的有关栈的基本操作函数来实现。请把该函数添加到文件test7.cpp中的主函数前,并在主函数中添加相应语句进行测试。函数原型如下:
int IsReverse(char *s)   //判断字符串S是否中心对称,是返回1,否则返回0

Test7.h的代码如下:

struct Stack {
    ElemType *stack ;   // 存栈元素
    int top;            // 栈顶指示器
    int MaxSize;            // 栈的最大长度
};
void InitStack (Stack &S)        //初始化堆栈
{         
S.MaxSize=10;
S.stack=(ElemType *) malloc(S.MaxSize *sizeof(ElemType));   //申请动态空间
if (!S.stack) {                             //假如空间分配失败
       cerr<<"动态分配失败!"<<endl;
       exit(1);
}
S.top=-1;                                    //栈顶指示
}

int EmptyStack (Stack S)         //判断是否是空栈
{
return S.top == -1;
}

void Push(Stack &S, ElemType item)    //把元素压入堆栈
{
if(S.top == S.MaxSize-1){    //若栈满,扩大两倍空间
   S.stack = (ElemType *) realloc( S.stack, 2*S.MaxSize*sizeof(ElemType) ); //继续申请空间
   S.MaxSize= 2*S.MaxSize;  
}
S.top ++;       
S.stack[S.top ] = item;
}

ElemType Pop(Stack &S)              //栈S的栈顶元素出栈并返回
{        
if (S.top==-1)           
{
   cerr<<"栈已空无数据元素出栈!"<<endl;
   exit(1);
}
S.top--;
return S.stack[S.top+1];
}

ElemType Peek( Stack S )        //取栈S的当前栈顶元素并返回
{         
if (S.top==-1)              //栈已空
{
   cerr<<"栈已空无数据元素出栈!"<<endl;
   exit(1);
}
return S.stack[S.top];
}

void ClearStack( Stack &S )     //销毁堆栈
{        
if (S.stack)
{
   free(S.stack);         //释放空间
   S.stack = NULL;
}
S.top = -1;
S.MaxSize = 0;
}

Test7.cpp 的代码如下:

#include <iostream.h>
#include <stdlib.h>
typedef char ElemType;
#include "test7.h"
int IsReverse(char *s)
{
Stack t;
InitStack(t);     //初始化堆栈
int i,j,res=1,x=0;
while(s[x]!='\0'){
   x++;
if(EmptyStack(t))
   for(j=0;j<x;j++)
    Push(t,s[j]);
}
cout<<"出栈字符为:"<<Peek(t)<<endl;
for(i=0;i<x/2;i++){
   if(s[i]==Pop(t))
    continue;
   else{
    res=0;
    break;
   }
   return res;         //返回标志
}
   ClearStack(t);
}
void main()
{
char a[80];            //定义数组
int i=0;
cout<<"输入字符串,以#为结束:"<<endl;
cin>>a[0];
while(a[i]!='#'){
   i++;
   cin>>a[i];         //输入线性表
}
a[i]='\0';            //线形表末尾
if(IsReverse(a))
   cout<<"字符串中心对称"<<endl;
else
   cout<<"字符串非中心对称"<<endl;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics