#include<iostream>
using namespace std;
//栈的结构体
typedef struct zhan1
{
int * base;
int * top;
int length;
int MAX;
}zhan1;
int * zhan_init(int MAX)
{
int * begin;
begin=(int *)malloc(MAX * sizeof(int));
return begin;
}
void insert_zhan(zhan1 & zhan,int e)
{
//先判断是否溢出
if(zhan.top>=zhan.base+10)
{
//此时不能进栈
printf("栈已满");
}
*(zhan.top)=e;
(zhan.top)++;
zhan.length++;
}
void search_zhan(zhan1 & zhan)
{
int e;
while(zhan.base!=zhan.top)
{
e=*zhan.base;
printf("%d ",e);
zhan.base++;
}
}
bool out_zhan(zhan1 & zhan)
{
int e;
//先判断是否为空
if(zhan.length==0)
{
printf("栈空");
return false;
}
zhan.length--;
// while(zhan.base!=zhan.top)
// {
zhan.top--;
e=*zhan.top;
// free(zhan.top);
// }
return true;
}
void jinzhi(zhan1 & zhan,int num)
{
int e;
while(num!=0)
{
e=num%8;
insert_zhan(zhan,e);
num=num/8;
}
out_zhan(zhan);
}
int get_last(zhan1 & zhan)
{
int e;
int * x;
x=zhan.top;
x--;
e=*x;
return e;
}
bool kuohaopipei(string a,zhan1 & zhan)
{
int i=0,e;
while(a[i]!=0)
{
switch(a[i])
{
case '(':
case '[':
case '{':
{insert_zhan(zhan,a[i]); i++;
break;}//进栈
case ')':
{
if(get_last(zhan)=='(')
{
out_zhan(zhan);
i++;}
else
{
insert_zhan(zhan,a[i]);
i++;
}
break;
}
case ']':{
if(get_last(zhan)=='[')
{
out_zhan(zhan);
i++;}
else
{
insert_zhan(zhan,a[i]);
i++;
}
break;
}
case '}':
{
//对栈前元素进行匹配
if(get_last(zhan)=='{')
{
out_zhan(zhan);
i++;}
else
{
insert_zhan(zhan,a[i]);
i++;
}
break;
}
}
}
//panduan
if(zhan.length==0)
{
printf("匹配成功");
return true;
}
else return false;
}
int main()
{
string a;
a="[{}]";
zhan1 zhan;
zhan.length=0;//初始化栈的长度
zhan.MAX=10;
zhan.base=zhan_init(zhan.MAX);
zhan.top=zhan.base;
//jinzhi(zhan,20);
//search_zhan(zhan);
kuohaopipei(a,zhan);
}
[数据结构]利用栈实现括号匹配和进制转换
最新推荐文章于 2024-07-14 21:31:19 发布