
#define FLASE0
#define TRUE 1
typedef int BOOL
/**栈定义**/
typedef struct
{
int top //栈顶指针
int ele[STACK_SIZE]
}Stack
void Initializing(Stack **s) //初始化栈为空
{
*s = (Stack *)malloc(sizeof(Stack))
(*s)->top = -1
}
void Destory(Stack **s) //销毁栈
{
free(*s)
*s = NULL
}
void Clear(Stack *s) //清空栈
{
s->top = -1
}
char GetTop(Stack *s) //取得栈顶元素
{
if (s->top >-1 &&s->top <STACK_SIZE)
{
return s->ele[s->top]
}
else
return '\0'
}
BOOL Isempty(Stack *s) /渣举/判断栈胡梁扮是否为空
{
if (-1 == s->top)
return FLASE
else
return TRUE
}
void Push(Stack *s, char ch) //入栈
{
if (STACK_SIZE - 1 == s->top)
{
printf("栈空间已满!")
return
}
else
{
++s->top
s->ele[s->top] = ch
}
}
char Pop(Stack *s) //出栈
{
char ch
if (-1 == s->top)
{
printf("空栈!")
return '\0'
}
else
{
ch = s->ele[s->top]
--s->top
return ch
}
}
/****************************/
BOOL Match(char *ch) //利用栈判断括号是否匹配
{
int i = 0
Stack *s
Initializing(&s) //初始化栈
if (ch == NULL || *ch == '\0') //空指针或空串直接返回
return TRUE
while (ch[i] != '\0')
{
if (ch[i] == '(') //左括号入栈
Push(s,ch[i])
else if (ch[i] == ')')//右括号出栈,如果为空栈,则不匹配直接返回
{
if (s->top == -1)
return FLASE
else
Pop(s)
}
i++ //其他符号继续读取
}
if (s->top != -1) //若栈不为空,输出不匹配个数,并返回假
{
printf("%d\裤灶n", s->top+1)
i = FLASE
}
else
i = TRUE
Destory(&s) //销毁单链表
return i
}
//最近的栈作业~#include<iostream>
using namespace std
class 粗明Stack
{
private:
int maxSize
int top
int *p
public:
Stack(int size)
{
maxSize=size
top=-1
p=new int[maxSize]
}
~Stack()
{
delete [] p
}
void Clear() //清空栈
{
top=-1
}
bool Push(const int value) //压入
{
if(top==maxSize-1)
{
cout<<"栈满溢出"<<endl
return false
}
else
{
p[++top]=value
return 信凳拆true
}
}
bool Pop(int &value) //读取栈顶元素的值并删除
{
if(top==-1)
{
cout<<"栈为空,不能进行删除 *** 作"<<endl
return false
}
else
{
value=p[top--]
return true
}
}
bool Top(int &value) //读取栈顶元素的滑枣值并不删除
{
if(top==-1)
{
cout<<"栈为空,不能读取栈顶元素"<<endl
return false
}
else
{
value=p[top]
return true
}
}
bool IsEmpty() //栈空否?
{
if(top==-1)
return true
else
return false
}
bool IsFull() //栈满否?
{
if(top==maxSize-1)
return true
else
return false
}
void show() //查看栈内元素的值
{
int t=top
cout<<"栈内元素:"<<endl
while(t+1)
cout<<p[t--]
cout<<endl
}
}
void match()
{
int i=0,flag=1,temp,flag2=1
char s[50]
char c
Stack formula(10)
cout<<"输入一个式子:\n"
cin>>s
c=s[i]
while(c&&flag)
{
if(c=='('||c=='['||c=='{')
{
formula.Push(c)
flag2=0
}
else if(c==')'||c==']'||c=='}')
{
if(formula.IsEmpty())
{
flag=0
break
}
formula.Pop(temp)
if(temp==c-1||temp==c-2)
else
{
flag=0
break
}
}
c=s[++i]
}
if(!formula.IsEmpty())
flag=0
if(flag2)
cout<<"无括号\n"
else if(flag)
cout<<"括号配对正确\n"
else
cout<<"括号配对错误\n"
}
int main()
{
match()
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)