C/C++数据结构通过顺序栈实现括号()匹配算法
来源:互联网 发布:钢结构三维建模软件 编辑:程序博客网 时间:2024/06/05 06:09
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef char ElemType;
typedef int Status;
typedef struct stack//创建顺序栈
{
ElemType *base,*top;//栈底指针、栈顶指针
int StackSize;//栈长度
}SQStack;
Status InitStack(SQStack* &S);//初始化栈
Status Push(SQStack* &S,ElemType e);//将元素e压入栈S
Status Pop(SQStack* &S,ElemType &e);//将元素e压出栈s
int main()
{
SQStack* S = new stack;//创建顺序栈并申请空间
InitStack(S);//初始化栈
S->StackSize = 0;//初始化栈长度为0
printf("请输入算术表达式:(将内容用括号()括起来\n");
char ch;//从键盘读取的字符
bool flag1 = true,flag2 = true;//两个bool变量分别对应匹配到左括号和又括号的标志
ElemType elem[100];//存储括号内字符串
while(flag1||flag2)//只有两个括号都读取到才可以跳出循环
{
ch = getch();//从键盘获取字符
switch(ch)//检测输入内容是否有括号并等待匹配
{
case '('://检测到左括号就改变flag1
printf("匹配到左括号\n");
flag1 = false;
break;
case ')'://检测到右括号就改变flag2
printf("匹配到右括号,匹配成功\n");
flag2 = false;
break;
default://没有获取到左右括号的字符
if(!flag1)//获取到左括号就开始入栈
{
S->StackSize++;
Push(S,ch);
}
}printf("%c",ch);
}
printf("匹配成功\n");
for(int i =0;i<S->StackSize ;i++)
{
Pop(S,elem[S->StackSize-i-1]);//匹配到右括号后出栈将栈元素保存到elem字符数组里并且是从后往前排
}
for(int i =0;i<S->StackSize ;i++)
{
printf("%c",elem[i]);//顺序输出字符数组,将栈内元素从栈底到栈顶输出
}
delete S;
return 0;
}
Status InitStack(SQStack* &S)//初始化栈
{
S->base = new ElemType[MAXSIZE];//构造一个空栈 空间最多能容纳MAXSIZE长度数组
if(!S->base)exit(0);
S->top = S->base;//top指针初始为base栈底,为空栈
S->StackSize = 0;
return OK;
}
Status Push(SQStack* &S,ElemType e)//将元素e压入栈S
{
if((S->top - S->base)==S->StackSize)return ERROR;//判断栈是否满,满则返回ERROR
S->top++;
*S->top = e;//将e值存入top位置处,并s.top置栈顶
return OK;
}
Status Pop(SQStack* &S,ElemType &e)//将元素e压出栈s
{
if(S->top == S->base) return 0;//判断栈是否为空,若空则返回ERROR
e = *(S->top);//将栈顶元素赋值给e将S栈顶指针移动到S下一位处为栈顶
S->top--;
return OK;
}
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef char ElemType;
typedef int Status;
typedef struct stack//创建顺序栈
{
ElemType *base,*top;//栈底指针、栈顶指针
int StackSize;//栈长度
}SQStack;
Status InitStack(SQStack* &S);//初始化栈
Status Push(SQStack* &S,ElemType e);//将元素e压入栈S
Status Pop(SQStack* &S,ElemType &e);//将元素e压出栈s
int main()
{
SQStack* S = new stack;//创建顺序栈并申请空间
InitStack(S);//初始化栈
S->StackSize = 0;//初始化栈长度为0
printf("请输入算术表达式:(将内容用括号()括起来\n");
char ch;//从键盘读取的字符
bool flag1 = true,flag2 = true;//两个bool变量分别对应匹配到左括号和又括号的标志
ElemType elem[100];//存储括号内字符串
while(flag1||flag2)//只有两个括号都读取到才可以跳出循环
{
ch = getch();//从键盘获取字符
switch(ch)//检测输入内容是否有括号并等待匹配
{
case '('://检测到左括号就改变flag1
printf("匹配到左括号\n");
flag1 = false;
break;
case ')'://检测到右括号就改变flag2
printf("匹配到右括号,匹配成功\n");
flag2 = false;
break;
default://没有获取到左右括号的字符
if(!flag1)//获取到左括号就开始入栈
{
S->StackSize++;
Push(S,ch);
}
}printf("%c",ch);
}
printf("匹配成功\n");
for(int i =0;i<S->StackSize ;i++)
{
Pop(S,elem[S->StackSize-i-1]);//匹配到右括号后出栈将栈元素保存到elem字符数组里并且是从后往前排
}
for(int i =0;i<S->StackSize ;i++)
{
printf("%c",elem[i]);//顺序输出字符数组,将栈内元素从栈底到栈顶输出
}
delete S;
return 0;
}
Status InitStack(SQStack* &S)//初始化栈
{
S->base = new ElemType[MAXSIZE];//构造一个空栈 空间最多能容纳MAXSIZE长度数组
if(!S->base)exit(0);
S->top = S->base;//top指针初始为base栈底,为空栈
S->StackSize = 0;
return OK;
}
Status Push(SQStack* &S,ElemType e)//将元素e压入栈S
{
if((S->top - S->base)==S->StackSize)return ERROR;//判断栈是否满,满则返回ERROR
S->top++;
*S->top = e;//将e值存入top位置处,并s.top置栈顶
return OK;
}
Status Pop(SQStack* &S,ElemType &e)//将元素e压出栈s
{
if(S->top == S->base) return 0;//判断栈是否为空,若空则返回ERROR
e = *(S->top);//将栈顶元素赋值给e将S栈顶指针移动到S下一位处为栈顶
S->top--;
return OK;
}
阅读全文
0 0
- C/C++数据结构通过顺序栈实现括号()匹配算法
- 数据结构之---C语言实现括号匹配(栈实现)
- C语言实现顺序栈的括号匹配
- 数据结构(C语言)---括号匹配
- 数据结构(C语言)读书笔记6:栈的应用之括号匹配的C代码实现
- c语言括号匹配算法
- c语言栈实现括号匹配
- C实例---括号匹配(栈实现)
- 括号匹配--顺序栈实现
- 顺序栈实现括号匹配
- 顺序栈实现括号匹配
- C语言 顺序栈使用之括号匹配
- 通过栈实现括号匹配
- C数据结构-栈和队列,括号匹配举例---ShinePans
- 【数据结构】栈的应用--括号的匹配(c++)
- C数据结构学习历程(4) 链栈之 括号匹配
- 学习笔记------数据结构(C语言版)栈应用 括号匹配
- 数据结构——栈——括号匹配(c++)
- (转)江南愤青丨丨监管办法之后,网贷一地鸡毛(2016年)
- CSDN初见
- spring-mvc入门(一)——springmvc框架
- 20.Oracle杂记——Oracle诊断会话监控脚本
- Python中的operator.itemgetter函数和sorted函数
- C/C++数据结构通过顺序栈实现括号()匹配算法
- windows下安装Python virtualenvwrapper-win
- 21.Oracle杂记——Oracle报告类脚本
- 由用户输入非递减的两组数据,将他们仍然非递减归并。
- LeetCode65 Valid Number
- 22.Oracle杂记——spotlight监控工具使用
- Android滑动改变头部效果
- mysql 基本操作
- BZOJ 1022 [SHOI2008]小约翰的游戏John 博弈论(anti-nim)