1.头文件:sqstack.h,包含定义顺序栈数据结构的代码、宏定义、要实现算法的函数的声明;
[cpp] view plaincopyprint?
01.#define MaxSize 100
02.typedef char ElemType;
03.typedef struct
04.{
05. ElemType data[MaxSize];
06. int top; //栈指针
07.} SqStack; //顺序栈类型定义
08.
09.void InitStack(SqStack *&s); //初始化栈
10.void DestroyStack(SqStack *&s); //销毁栈
11.bool StackEmpty(SqStack *s); //栈是否为空
12.int StackLength(SqStack *s); //返回栈中元素个数——栈长度
13.bool Push(SqStack *&s,ElemType e); //入栈
14.bool Pop(SqStack *&s,ElemType &e); //出栈
15.bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素
16.void DispStack(SqStack *s); //输出栈
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; //栈指针
} SqStack; //顺序栈类型定义
void InitStack(SqStack *&s); //初始化栈
void DestroyStack(SqStack *&s); //销毁栈
bool StackEmpty(SqStack *s); //栈是否为空
int StackLength(SqStack *s); //返回栈中元素个数——栈长度
bool Push(SqStack *&s,ElemType e); //入栈
bool Pop(SqStack *&s,ElemType &e); //出栈
bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素
void DispStack(SqStack *s); //输出栈
2.源文件:sqstack.cpp,包含实现各种算法的函数的定义
[cpp] view plaincopyprint?
01.#include <stdio.h>
02.#include <malloc.h>
03.#include "sqstack.h"
04.
05.void InitStack(SqStack *&s)
06.{
07. s=(SqStack *)malloc(sizeof(SqStack));
08. s->top=-1;
09.}
10.void DestroyStack(SqStack *&s)
11.{
12. free(s);
13.}
14.int StackLength(SqStack *s) //返回栈中元素个数——栈长度
15.{
16. return(s->top+1);
17.}
18.bool StackEmpty(SqStack *s)
19.{
20. return(s->top==-1);
21.}
22.bool Push(SqStack *&s,ElemType e)
23.{
24. if (s->top==MaxSize-1) //栈满的情况,即栈上溢出
25. return false;
26. s->top++;
27. s->data[s->top]=e;
28. return true;
29.}
30.bool Pop(SqStack *&s,ElemType &e)
31.{
32. if (s->top==-1) //栈为空的情况,即栈下溢出
33. return false;
34. e=s->data[s->top];
35. s->top--;
36. return true;
37.}
38.bool GetTop(SqStack *s,ElemType &e)
39.{
40. if (s->top==-1) //栈为空的情况,即栈下溢出
41. return false;
42. e=s->data[s->top];
43. return true;
44.}
45.
46.void DispStack(SqStack *s) //输出栈
47.{
48. int i;
49. for (i=s->top;i>=0;i--)
50. printf("%c ",s->data[i]);
51. printf("\n");
52.}
#include <stdio.h>
#include <malloc.h>
#include "sqstack.h"
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->top=-1;
}
void DestroyStack(SqStack *&s)
{
free(s);
}
int StackLength(SqStack *s) //返回栈中元素个数——栈长度
{
return(s->top+1);
}
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;
return true;
}
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;
}
void DispStack(SqStack *s) //输出栈
{
int i;
for (i=s->top;i>=0;i--)
printf("%c ",s->data[i]);
printf("\n");
}
3.主函数
01.#include <stdio.h>
02.#include "sqstack.h"
03.int main()
04.{
05. char c;
06. char st[50];
07. int d=1, i;
08. SqStack *s;
09. InitStack(s);
10. printf("请输入表达式:");
11. scanf("%s", st);
12. for(i=0; st[i]!='\0'&&d; i++)
13. {
14. switch(st[i])
15. {
16. case'(':
17. case'[':
18. case'{':
19. Push(s, st[i]);
20. break;
21. case')':
22. Pop(s, c);
23. if(c!='(') d=0;
24. break;
25. case']':
26. Pop(s, c);
27. if(c!='[') d=0;
28. break;
29. case'}':
30. Pop(s,c);
31. if(c!='{') d=0;
32. break;
33. }
34. }
35. if(StackEmpty(s)&&d==1)
36. printf("配对正确!!\n");
37. else
38. printf("配对错误!!\n");
39. return 0;
40.}
运行结果:
学习心得:
很长时间才调试出来,不过最后还是明白了~