php 栈操作匹配括号( )
来源:互联网 发布:985 211 知乎 编辑:程序博客网 时间:2024/06/06 00:10
今天面试的时候被面试官问到栈操作,当时回答的不是很好,回来后查资料自己总结了一下。
括号匹配是栈的一个重要的应用。具体做法:对输入的字符串进行筛选,找出其中的括号入栈。对于匹配的括号,不管有多复杂,总是先对紧邻的两个括号进行匹配的,
如:({ } { [ ( ) ]。首先第一个‘(’入栈,当下一个括号不是右括号(即“)]}”),继续‘{’入栈,当遇到‘}’时,弹出栈顶的 ‘{‘与此时的‘}’进行比较,匹配则继续,不匹配则停止,给出不匹配的括号,如此下去直到全部处理完所有的括号,检查栈是否为空,判断最终是否匹配成功。
#include "stdafx.h"
#include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define CONVERSION_NUM 8
typedef int SElemType;
typedef int Status;
typedef struct{
SElemType *base;
SElemType *top;
int stackSize;
}stack;
stack s; //全局变量,栈
Status InitStack(stack &s){
s.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!s.base){ cout << "内存不足!" << endl; return ERROR; }
s.top = s.base;
s.stackSize = STACK_INIT_SIZE;
return OK;
}
bool StackEmpty(stack s){
if (s.base == s.top) return true;
else return false;
}
Status Push(stack &s, SElemType e){
if (s.top - s.base >= s.stackSize){
s.base = (SElemType*)realloc(s.base, (s.stackSize + STACKINCREMENT) * sizeof(SElemType));
if (!s.base){ cout << "内存不足!" << endl; return ERROR; }
s.stackSize = s.stackSize + STACKINCREMENT;
}
*s.top = e;
s.top++;
return OK;
}
Status Pop(stack &s, SElemType &e){
if (s.base == s.top){ cout << "栈为空!" << endl; return ERROR; }
s.top--;
e = *s.top;
return OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
InitStack(s);
char *p;
int e;
p = (char *)malloc(sizeof(char)* 100);
cout << "输入包含括号的表达式:"<<endl;
while (gets(p)){
/*处理过程 筛选出字符串中的括号 是左括号就入栈 遇到右括号就出栈,并将栈顶元素赋值给变量e,这时比较e与此时的右括号,
若同为() 或 [] 或 {} 则匹配成功 否则 匹配失败
*/
while (*p){
switch (*p)
{
case '(':Push(s, *p++); break; //左括号则入栈,p指针往后移动
case '[':Push(s, *p++); break;
case '{':Push(s, *p++); break;
case ')':
Pop(s, e);
if (e == '(') p++;
else { cout << "')'匹配失败" << endl; exit(OVERFLOW); }
break;
case ']':
Pop(s, e);
if (e == '[') p++;
else { cout << "']'匹配失败" << endl; exit(OVERFLOW); }
break;
case '}':
Pop(s, e);
if (e == '{') p++;
else { cout << "'{'匹配失败" << endl; exit(OVERFLOW); }
break;
default:p++;
break;
}
}
if (StackEmpty(s))cout << "匹配成功!" << endl;
else cout << "匹配失败,缺少右括号!" << endl;
cout << "输入包含括号的表达式:" << endl;
}
system("pause");
return 0;
}
- php 栈操作匹配括号( )
- 括号匹配(栈操作)
- 【栈操作&括号匹配】Valid Parentheses
- 栈操作和应用—括号匹配
- [数据结构-栈]栈的基本操作&括号匹配
- 利用栈的基本操作,检查括号是否匹配
- 栈---括号匹配
- 括号匹配(栈)
- [栈] 括号匹配问题
- 栈实例-括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈之括号匹配
- 括号匹配(栈)
- 栈-括号匹配
- 括号匹配(栈)
- 栈&&括号匹配
- 直接插入排序
- PAT 1094. The Largest Generation (25)
- java读取文件数据进行一些简单处理的例子
- VLAN
- Ionic2 Scss
- php 栈操作匹配括号( )
- nodejs使用multer中间件上传混合表单提交(文件和非文件普通文本域)
- react-native-vector-icons使用(二)
- 几个Linux函数的使用
- Java读取文件内容的几种方式
- 红黑树
- 搜索--04
- mysql 事务 MySQL视图
- windows设置MongoDB服务