顺序栈

/*

栈的几种基本运算如下:

InitStack(&s):初始化栈。构造一个空栈s。
DestroyStack(&s):销毁栈,释放栈S占用的存储空间
StackEmpty(s):判断栈是否为空:若栈s为空,则返回值为真,否则返回值为假
Push(&s,e):进栈。将元素e插入到栈S中作为栈顶元素
Pop(&s,&e):出栈,重栈s中退出栈顶元素,并将其值赋给e
GetTop(s,&e):去栈顶元素,返回当前的栈顶元素,并将其值赋给e

*/

代码块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//顺序栈类型
typedef struct {
int data[maxsize];
int top;
}SqStack;
/*
top总是指向栈顶元素,初始值为-1
当top=maxsize-1时不能再进栈(栈满)
进栈时top+1,出栈时top-1
*/
/*初始化栈*/
``` bash
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}

/销毁栈/

1
2
3
4
void DestroyStack(SqStack *&s)
{
free(s);
}

/判断一个栈是否为一个空栈/

1
2
3
4
bool StackEmpty(SqStack *s)
{
return(s->top==-1);
}

/进栈/

1
2
3
4
5
6
7
8
bool Push(SqStack *&s,int e)
{
if(s->top==maxsize)
return false;
s->top++;
s->data[s->top]=e;
return true;
}

/出栈/

1
2
3
4
5
6
7
8
bool Pop(SqStack *&s,int &e)
{
if(s->top==-1)
return false;
e=s->data[s->top];
s->top--;
return true;
}

/取栈顶元素/

1
2
3
4
5
6
7
bool GetTop(SqStack *s,int &e)
{
if(s->top==-1)
return false;
e=s->data[s->top];
return true;
}

/判断字符串是否为对称串/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool symmetry(int str[])
{
int i;
int e;
SqStack *st;
InitStack(st);
for(i=0;str[i]!='\0';i++)
{
Push(st,str[i]);
}
for(i=0;str[i]!='\0';i++)
{
Pop(st,e);
if(str[i]!=e)
{
DestroyStack(st);
return false;
}
}
DestroyStack(st);
return true;
}

Fork me on GitHub