#include <stdio.h> #include <conio.h> #include <stdlib.h> //system(); 这个指令需要用到此头文件 #include <ctype.h> //toupper要用到 #include <malloc.h> //在内存管理时用到的头文件 #include <string.h> //字符串的头文件 #define MAX_SIZE 100 //定义栈初始空间的容量 typedef struct //建立结构体 { int top; int size; char *base; }STACK; void push(STACK *s, char e); //压入元素 void pop(STACK *s, char *e); //删除元素 void push(STACK *s, char e) { if (s->top + 1 > MAX_SIZE) //如果 此时top之前指向 100的位置,那么就要溢出了,则例通过判断排除溢出的情况,直接退出当前函数 return; *(s->base + s->top) = e; //base指向栈底,top指向栈顶元素的上一层空白处,将空白处填入e s->top++; //空白处填入1后,top指向下一个空白 } void pop(STACK *s, char *e) { if (s->top <= 1) return; *e = *(s->base + s->top); s->top--; //将栈顶指针 回移 } STACK stack; int result = 0; void main(int argc, char **argv) { char buf[100]; int i = 0; char temp; stack.top = 1; //数据从stack->base+stack+top 开始存 stack.size = MAX_SIZE; //为100 stack.base = (char *)malloc(sizeof(char)*stack.size);//申请内存空间 if (stack.base = NULL) { printf("stack = NULL RETURN"); return; } memset(stack.base, '0', sizeof(STACK)); memcpy(buf, argv[1], strlen(argv[1]));//将需要解析的字符串存在buf中 buf[strlen(argv[1])] = '\0'; //'\0'来表示结束 while (buf[i] != '\0') if (buf[i] == '(') //碰到左括号 { push(&stack, buf[i]); //出现左括号,入栈 } else if (buf[i] == ')') //碰到右括号 { if (stack.top == 1) //如果栈中没有左括号,则错误,result=1 { result = 1; } else if (*(stack.base + stack.top - 1) == '(');//如果栈里有左括号 { pop(&stack, &temp); //出栈 } i++; } if (stack.top > 1) //如果括号中还有左括号,缺少右括号 result = 1; if (result == 1) printf("Wrong!"); if (result == 0) printf("Right"); }
C数据结构-栈和队列,括号匹配举例,布布扣,bubuko.com
原文:http://blog.csdn.net/panshang1994/article/details/27790993