/*顺序栈*/
#include<iostream>
using namespace std;
#include<stdlib.h>
typedef char ElemType;
#define MaxSize 100
struct SqStack
{
ElemType data[MaxSize];
int top;//栈顶指针
};
/*约定top初始值为-1(栈空标志),当top=MaxSize-1时不能再进栈—栈满标志*/
//初始化栈
void InitStack(SqStack *&s)
{
s = (SqStack*)malloc(sizeof(SqStack));
s->top = -1;
/*注意:s为栈指针,top为s所指栈的栈顶指针*/
}
//销毁栈
void DestroyStack(SqStack *&s)
{
free(s);
}
//栈判空
bool StackEmpty(SqStack *s)
{
if (s->top == -1)
{
return true;
}
}
//进栈Push:在栈不满的条件下,先将栈指针增一,然后在该位置上插入元素e
bool Push(SqStack *&s, ElemType e)
{
if (s->top == MaxSize - 1)
{
return false;
}
s->top++;
s->data[s->top] = e;
return true;
}
//出栈pop:在栈不为空的条件下,先将栈顶元素赋给e,然后给栈顶指针减一
bool Pop(SqStack *&s, ElemType &e)
{
if (s->top == -1)
{
return false;
}
e = s->data[s->top];
s->top--;
return true;
}
//取栈顶元素
bool GetTop(SqStack *s, ElemType &e)
{
if (s->top == -1)
{
return false;
}
e = s->data[s->top];
return true;
}
//题目:设计一个算法利用顺序栈判断一个字符串是否是对称串。所谓对称串是指从左到右读和从右到左读的序列相同
//算法设计思路:字符串str的所有元素依次进栈,产生的出栈序列正好与str的顺序相同,则str是对称串
bool symmetry(ElemType s1[])
{
int i;
ElemType e;
SqStack *s;
InitStack(s);
for (i = 0; s1[i] != '\0'; i++)
{
Push(s, s1[i]);
}
for (i = 0; s1[i] != '\0'; i++)
{
Pop(s, e);
if (e != s1[i])
{
DestroyStack(s);
return false;
}
}
DestroyStack(s);
return true;
}
int main()
{
SqStack *s;
int i = 5;
ElemType s1[100];
while (i > 0)
{
cin >> s1;
if (symmetry(s1))
{
cout << "是对称数" << endl;
}
else
cout << "不是对称数" << endl;
i--;
}
return 0;
}
顺序栈的基本操作
最新推荐文章于 2022-10-08 20:25:27 发布