栈的应用-括弧匹配
作者:互联网
利用顺序栈实现括弧匹配
括弧匹配原则:
1.当出现(){}[]时,表示括弧匹配成功
2.算法实现,利用压栈,出栈的操作实现括弧匹配:
(1)当遇到(、{、[ 时,压栈;
(2)在遇到)、}、]时,首先判断栈顶元素是否分别对应(、{、[ ;如果对应,则将栈顶元素出栈,将标志为1;如果不对应,则不出栈,标志为0(!!!重要,首先判断栈顶元素是否匹配,只有匹配才出栈)
(3)最终判断是否全部匹配时,要满足两个要求:栈为空,标志为1.
stack.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *array;
static int count=-1;
//初始化栈
void init_stack(int size)
{
array=(char *)malloc(size*sizeof(char));
if(!array)
{
printf("创建失败");
exit(0);
}
}
//向栈中压入元素
void push(char val)
{
count=count+1;
array[count]=val;
}
//获取栈顶元素
char gettop()
{
if(count==-1)
{
printf("此栈为空栈\n");
exit(0);
}
return array[count];
}
//输出栈顶元素并删除栈顶
char pop()
{
if(count==-1)
{
printf("已经到栈底了\n");
exit(0);
}
char val=gettop();
count--;
return val;
}
//计算栈的长度
int length()
{
return count+1;
}
//打印栈的信息
void print_stack()
{
int i=count;
while(i!=-1)
{
printf("%c",array[i]);
i=i-1;
}
printf("\n");
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern init_stack(int size);
extern void push(char val);
extern char gettop();
extern char pop();
extern int length();
extern void print_stack();
void kuomatch()
{
char tmp;
int flage=1;
char test[100]="(){[)}";
for(int i=0;i<strlen(test);i++)
{
switch(test[i])
{
case '{':
case '[':
case '(':
{
push(test[i]);
printf("acd\n");
break;
}
case '}':
{
if(gettop()=='{')
pop();
else
flage=0;
printf("}\n");
break;
}
case ']':
{
if(gettop()=='[')
pop();
else
flage=0;
break;
}
case ')':
{
if(gettop()=='(')
pop();
else
flage=0;
}
}
}
printf("%d\n",flage);
if(length()==0&&flage==1)
printf("匹配正确\n");
else
printf("匹配错误\n");
}
int main()
{
init_stack(100);
kuomatch();
return 0;
}
标签:count,括弧,匹配,int,void,char,应用,array,include 来源: https://blog.csdn.net/qq_28398393/article/details/81514245