数据结构-括号匹配程序

程序代码如下:

 1 #include <stdio.h>

 2 #include <stdlib.h>

 3 #define STACK_INIT_SIZE 100

 4 #define STACKINCREMENT 10

 5 #define OVERFLOW -2

 6 #define OK 1

 7 #define ERROR 0

 8 

 9 typedef char SElemType;

10 

11 //栈结构体

12 typedef struct {

13     SElemType *base;

14     SElemType *top;

15     int stacksize;

16 }SqStack;

17 

18 int InitStack(SqStack *S);//初始化栈

19 int Push(SqStack *S,SElemType e);//入栈

20 int Pop(SqStack *S,SElemType *e);//删除栈中的元素

21 int DestoryStack(SqStack *S);//销毁栈

22 

23 //初始化栈

24 int InitStack(SqStack *S) {

25     S->base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

26     if(!S->base) {

27         exit(OVERFLOW);

28     }

29     S->top = S->base;

30     S->stacksize = STACK_INIT_SIZE;

31 

32     return OK;

33 }

34 

35 //入栈

36 int Push(SqStack *S,SElemType e) {

37     if((S->top-S->base)>=S->stacksize) {

38         S->base = (SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));

39         if(!S->base) exit(OVERFLOW);

40         S->top = S->base + S->stacksize;

41         S->stacksize += STACKINCREMENT;

42     }

43     *S->top++ = e;

44     return OK;

45 }

46 

47 //删除栈中的元素

48 int Pop(SqStack *S,SElemType *e) {

49     if(S->top  == S->base) return ERROR;

50     *e = *--S->top;

51     return OK;

52 }

53 

54 //销毁栈

55 int DestoryStack(SqStack *S) {

56     S->top = S->base;

57     free(S->base);

58     S->top = NULL;

59     S->base = NULL;

60     return OK;

61 }

62 

63 //进行括号匹配

64 int Match(SqStack *S) {

65     char ch,c;

66     printf("请输入待匹配的括号:");

67     ch = getchar();

68     while(ch != '\n') {

69         if(ch=='('||ch=='[') {

70             Push(S,ch);

71         }

72         if(ch==')') {

73             Pop(S,&c);

74             if(c!='(') {

75                 return ERROR;

76             }

77         }

78         if(ch==']') {

79             Pop(S,&c);

80             if(c!='[') {

81                 return ERROR;

82             }

83         }

84         ch = getchar();

85     }

86     return OK;

87 }

88 

89 int main()

90 {

91     SqStack sq;

92     int f;

93     InitStack(&sq);

94     f = Match(&sq);//进行括号匹配检验

95     if(f) printf("括号全部匹配!\n");

96     else printf("括号匹配失败!\n");

97     DestoryStack(&sq);//将栈销毁

98     return 0;

99 }

 

你可能感兴趣的:(数据结构)