括号的匹配"/>
C语言 栈的应用----括号的匹配
栈的应用
- 简单干脆直奔主题:
- 注意:
简单干脆直奔主题:
代码实现的功能就是对括号的匹配工作,原理就是利用了栈的基本性质,先让“(” “{” “[” 进入栈,当不是以上三个括号时,弹出栈顶符号判断是否与当前符合匹配;
注意:
在本此代码中引用了字符串的相关概念,有兴趣的同学可以网上查找相关理论。eg:用指针变量存储字符串;
/*括号匹配问题;(栈)
*/
#include <stdio.h> //引用 输入(scanf)、输出(printf)函数的头文件;
#include <stdlib.h> //引用 malloc free函数的头文件;
//定义栈的结构;
typedef struct LinkNode{char data; //存放数据元素;LinkNode *next; //指针域;
}LinkNode, *LinkStack;//初始化栈;
void InitStack(LinkStack &S)
{S = NULL;
}//判断栈空;
bool EmptyStack(LinkStack S)
{if (S == NULL)return true;elsereturn false;
}//新增元素:入栈;-->单链表的前插操作;
void InsertStack(LinkStack &S,char str)
{LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));//printf("input what you want to insert:");//scanf("%s",p->data);p->data = str;//strcpy(p->data,str);p->next = S;S = p;
}//删除元素:出栈;
bool DeleteStack(LinkStack &S,char &elem){if (EmptyStack(S)) //栈空报错; return false;LinkNode *p = S; //定义要删除的结点; //printf("the Elem is Deleted: %s",p->data); elem = p->data;S = p->next;free(p);return true;
}int main() {//首先初始化栈;printf("The main function is:\n");printf("栈的应用----括号的匹配(英文状态)\n");LinkStack S; InitStack(S); //初始化栈;//定义一个指针变量,存放字符串数组的首地址; char *str = (char *)malloc(sizeof(char)); printf("input a string:");scanf("%s",str);//循环判断元素是否为空; while(*str){//有*,输出指针所指内容;没有*,输出10进制地址所对应的字符; //printf("%c",*str); if (*str == '(' or *str == '[' or *str == '{')InsertStack(S,*str); //将左括号在内的元素进栈; else{if (EmptyStack(S)) //栈中没有左括号,匹配失败; {printf("There is not '(' or '[' or '{' ");return 1;}char elem; //定义一个字符串,记录当前要出栈的元素; DeleteStack(S,elem); //栈顶元素出栈; //分别判断出栈元素与当前符号是否匹配;if (elem != '(' and *str == ')'){printf("Matching failed('(')!");return 0;}if (elem != '[' and *str == ']'){printf("Matching failed('[')!");return 0;}if (elem != '{' and *str == '}'){printf("Matching failed('{')!");return 0;} }*str++; //指针加1;指向下一个元素; }if (!EmptyStack(S)) //若此时栈中还有元素,则匹配失败;{printf("Matching failed!");return 1; } printf("Successful!!!");return 0;
}
写在最后面:
代码如有不足之处,留言相互学习
更多推荐
C语言 栈的应用----括号的匹配
发布评论