数据结构:用静态栈实现检测括号是否匹配

算法:检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。

#include"Stack.h"

int main()
{
	Stack S;
	int i = 0;
   char str[MAX_SIZE];
   printf("请输入表达式:");
   gets(str);//从控制台获取字符串赋值给str(ascll码形式)
   StackInit(&S);
   for(i = 0;i<strlen(str);i++)
   {
	   if(str[i] == '(' || str[i] == '{'|| str[i] == '[' )
	   {
	   StackPush(&S, str[i]);
	   }
	   else if(str[i] == ')' && StackTop(&S) == '(')
	   {
	   StackPop(&S);
	   }
	   else if(str[i] == '}' && StackTop(&S) == '{')
	   {
	   StackPop(&S);
	   }
	   else if(str[i] == ']' && StackTop(&S) == '[')
	   {
	   StackPop(&S);
	   }
	   else
	   {
	   i++;
	   }
   }
     if(StackEmpty(&S))
	   {
		   printf("括号匹配!\n");
	   }
	   else
	   {
	       printf("括号不匹配!\n");
	   }
    return 0;
	system("pause");
}

#include"Stack.h"
void StackInit(Stack* S)
{
	S->_bottom = S->_top = 0;
	S->len = 0;
}

void StackPush(Stack* S, DataType data)
{
	if(S->len == MAX_SIZE)
	{
	printf("栈满溢出,添加失败!\n");
	return;
	}
	S->_top++;
	S->_arr[S->_top] = data;
	S->len++;
	printf("入栈成功!!\n",data);
}

void StackPop(Stack* S)
{
	if(S->len == 0)
	{
	printf("栈为空!!!\n");
	return;
	}
	//printf(" %d 出栈\n",S->_arr[S->_top]);
	S->_top--;
	S->len--;
	//printf("此时栈顶元素为:%d\n",S->_arr[S->_top]);
}

DataType StackTop(Stack* S)
{
   int ret = 0;
   if(S->len == 0)
	{
	printf("栈为空!\n");
	return;
	}
   ret = S->_arr[S->_top];
   return ret;
}

int StackSize(Stack* S)
{
	int ret = 0;
	ret = printf("栈中元素个数为:%d\n",S->len);
	return ret;
}

int StackEmpty(Stack* S)
{
   if(S->len == 0 )
	{
	printf("栈为空!!\n");
	return 1;
	}
   else
   {
   printf("栈不为空\n");
   return 0;
   }
}

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
#define MAX_SIZE 100

typedef struct Stack
{
	DataType _arr[MAX_SIZE];//栈的元素最大个数
	int _top;//栈顶
	int _bottom;//栈低
	int len;//栈大小
}Stack;

void StackInit(Stack* S);
void StackPush(Stack* S, DataType data);
void StackPop(Stack* S);
DataType StackTop(Stack* S);
int StackSize(Stack* S);
int StackEmpty(Stack* S);



猜你喜欢

转载自blog.csdn.net/w_j_f_/article/details/80084782