#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