C语言用栈编写括号匹配

C语言用栈编写括号匹配,第1张

#define STACK_SIZE 160 //栈空间大小

#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

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12353498.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存