#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 1024
//设计顺序栈结构体数据类型
typedef struct stack
{
char data[SIZE];//数据,使用数组存放
int top;//栈顶,告诉用户当前数据的顶端所在地
}*Stack;
//初始化一个栈
Stack init_stack()
{
Stack st=(Stack)malloc(sizeof(struct strack));
if(st==NULL)
{
printf("malloc error\n");
return NULL;
}
st->top=-1;
return st;
}
//入栈,压栈
int Stack_push(Stack st,char data)
{
if(!st)
{
return -1;
}
//把数据放到数组中,并且返回之后栈顶退一步
st->data[++(st->top)]=data;
}
//出栈
int Stack_pop(Stack st)
{
if(!st)
{
return -1;
}
//返回当前栈顶的数据;并且返回之后栈顶退一步
return st->data[(st->top)--];
}
//销毁栈
int Stack_destory(Stack *st)
{
if(*st)
{
return -1;
}
free(*st);
*st=NULL;
return 0;
}
//判断栈是否为空,是空的就返回1,否则返回0
int Stack_is_empty(Stack st)
{
//不是空战,st指向的内存地址是有效的,指栈有内存空间,但是否有内存,使用判断
if(st)
{
return st->top==-1;
}
else{
printf("该栈不存在\n");
return 0;
}
}
int Stack_clear(Stack st)
{
if(!st)
{
return -1;
}
st->top=-1;
bzero(st->data,SIZE);
return 0;
}
int Stack_top(Stack st)
{
if(!st)
{
return -1;
}
return st->data[st->top];
}
//判断表达式中括号是否匹配
int Stack_judge_match(char *str)
{
int i=0;
int ret=1;
//1.新建一个栈,用于存放表达式中的括号
Stack st=init_Stack();
//2.遍历str中的所以的字符,遇到'\0'结束循环
while(str[1])
{
//判断是否为众多左括号中的一个
if(str[i]=='('|| str[i]=='[' || str[i]=='{' )
{
Strack_push(st,str[i]);
}
else if(str[i]==')' || str[i]==']' || str[i]=='{')
{
if(Stack_is_empty(st))//判断栈是否为空,空的就表示没有括号
{
ret=0;
}
else if(str[i]==')'&& Stack_top(st)=='(' || str[i]==']' && Stack_top(st)=='['
|| str[i]=='}' && Stack_top(st)=='{')
{
Stack_top(st);
}
else{
ret=0;
}
}
i++;
}
Stack_destory(&st);
return ret;
}
int main()
{
char str[100]={};
Stack st=init_Stack();
Stack_push(st,10);
Stack_push(st,20);
Stack_push(st,30);
while(!(Stack_is_emptyst)))
{
printf("%d\n",Stack_pop(st));
}
Stack_clear(st);
Stack_destory(&st);
gets(str);
int ret = Stack_judge_match(str);
if(!ret)
{
printf("no\n");
}
else
{
printf("yes\n");
}
return 0;
}
栈基本功能代码(包含 判断表达式中括号是否匹配)
最新推荐文章于 2022-08-04 22:21:08 发布