- 1. 介绍
- 2.代码部分,判断括号是否匹配
- 3.测试
- 4.全部代码
- 5.测试结果
3.2栈的应用—括号匹配 现在,有一行括号序列,里面只包含()[]{}六种符号,请你检查这行括号是否配对。如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
bool bracketMatching(char* paraString, int paraLength)
{
//1.初始化一个栈,把'#'压入栈
CharStackPtr tempStack = charStackInit();
push(tempStack, '#');
char tempChar, tempPopedChar;
//2.判断符号
for (int i = 0; i < paraLength; i++)
{
tempChar = paraString[i];
switch (tempChar)
{
case '(':
case '[':
case '{':
push(tempStack, tempChar);
break;
case ')':
tempPopedChar = pop(tempStack);
if (tempPopedChar != '(')
{
tempPopedChar = pop(tempStack);
return false;
}
break;
case ']':
tempPopedChar = pop(tempStack);
if (tempPopedChar != '[') {
return false;
}
break;
case '}':
tempPopedChar = pop(tempStack);
if (tempPopedChar != '{') {
return false;
}
break;
defalut:
break;
}
}
tempPopedChar = pop(tempStack);
if (tempPopedChar != '#') {
return false;
}
return true;
}
3.测试
void bracketMatchingTest() {
char tempExpression[18] = "[2 + (1 - 3)] * 4";
bool tempMatch = bracketMatching(tempExpression, 18);//括号匹配则tempMatch值为一,否则为0
printf("Is the expression '%s' bracket matching? %d rn", tempExpression, tempMatch);
char tempExpressiontwo[7] = "()(}{{";
bool tempMatchtwo = bracketMatching(tempExpressiontwo, 7);//括号匹配则tempMatchtwo值为一,否则为0
printf("Is the expression '%s' bracket matching? %d rn", tempExpressiontwo, tempMatchtwo);
}
4.全部代码
#include5.测试结果#include #define STACK_MAX_SIZE 10 //创建结构体 typedef struct CharStack { int top; int data[STACK_MAX_SIZE]; }*CharStackPtr; //输出栈 void outputStack(CharStackPtr paraStack) { for (int i = 0; i <= paraStack->top; i++) { printf("%c", paraStack->data[i]); } printf("rn"); } //初始化栈 CharStackPtr charStackInit() { CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(CharStack)); resultPtr->top = -1; return resultPtr; } //在栈里添加元素 void push(CharStackPtr paraStackPtr, int paraValue) { //检测栈的空间 if (paraStackPtr->top >= STACK_MAX_SIZE - 1) { printf("空间已满,无法添加rn"); return; } //更新top paraStackPtr->top++; //添加元素 paraStackPtr->data[paraStackPtr->top] = paraValue; } //弹出元素,并返回被弹出的元素 char pop(CharStackPtr paraStackPtr) { //空间检查 if (paraStackPtr->top < 0) { printf("栈是空的,无法弹出"); return ' '; } //更新top paraStackPtr->top--; //返回被弹出的值 return paraStackPtr->data[paraStackPtr->top + 1]; } //添加,弹出测试 void pushPopTest() { printf("---- pushPopTest begins. ----rn"); // Initialize. CharStackPtr tempStack = charStackInit(); printf("After initialization, the stack is: "); outputStack(tempStack); // Pop. for (char ch = 'a'; ch < 'm'; ch++) { printf("Pushing %c.rn", ch); push(tempStack, ch); outputStack(tempStack); }//Of for i // Pop. for (int i = 0; i < 3; i++) { char ch = pop(tempStack); printf("Pop %c.rn", ch); outputStack(tempStack); }//Of for i printf("---- pushPopTest ends. ----rn"); } bool bracketMatching(char* paraString, int paraLength) { //1.初始化一个栈,把'#'压入栈 CharStackPtr tempStack = charStackInit(); push(tempStack, '#'); char tempChar, tempPopedChar; //2.判断符号 for (int i = 0; i < paraLength; i++) { tempChar = paraString[i]; switch (tempChar) { case '(': case '[': case '{': push(tempStack, tempChar); break; case ')': tempPopedChar = pop(tempStack); if (tempPopedChar != '(') { tempPopedChar = pop(tempStack); return false; } break; case ']': tempPopedChar = pop(tempStack); if (tempPopedChar != '[') { return false; } break; case '}': tempPopedChar = pop(tempStack); if (tempPopedChar != '{') { return false; } break; defalut: break; } } tempPopedChar = pop(tempStack); if (tempPopedChar != '#') { return false; } return true; } //测试 void bracketMatchingTest() { char tempExpression[18] = "[2 + (1 - 3)] * 4"; bool tempMatch = bracketMatching(tempExpression, 18);//括号匹配则tempMatch值为一,否则为0 printf("Is the expression '%s' bracket matching? %d rn", tempExpression, tempMatch); char tempExpressiontwo[7] = "()(}{{"; bool tempMatchtwo = bracketMatching(tempExpressiontwo, 7);//括号匹配则tempMatchtwo值为一,否则为0 printf("Is the expression '%s' bracket matching? %d rn", tempExpressiontwo, tempMatchtwo); } void main() { // pushPopTest(); bracketMatchingTest(); }
Is the expression '[2 + (1 - 3)] * 4' bracket matching? 1
Is the expression '()(}{{' bracket matching? 0



