栈的括号匹配 C语言

原创 2018年04月15日 10:53:38
//括号匹配
#define ElementType char
struct StackNode
{
	ElementType data;
	int Length;
	struct StackNode* pNext;
};
typedef struct StackNode *Stack;

Stack CreateStack()
{
	Stack MyStack = (Stack)malloc(sizeof(struct StackNode));
	MyStack->pNext = NULL;
	MyStack->Length = 0;
	return MyStack;
}


void Push(Stack S,ElementType data)
{
	Stack TmpCell = (Stack)malloc(sizeof(struct StackNode));
	TmpCell->data = data;
	TmpCell->pNext = S->pNext;
	S->pNext = TmpCell;
}

ElementType Pop(Stack S)
{
	if (S->pNext==NULL)
	{
		printf("Empty\n");
		exit(0);
	}
	Stack Temp;
	Temp = S->pNext;
	S->pNext = Temp->pNext;
	ElementType T = Temp->data;
	free(Temp);
	return T;
}
ElementType GetTop(Stack S)
{
	if (!S->pNext)
	{
		printf("Empty\n");
		exit(0);
	}
	Stack Temp;
	Temp = S->pNext;
	ElementType T = Temp->data;
	return T;
}

int main()
{
    	Stack S1 = CreateStack();
	char ch[20];
	printf("请输入括号个数:\n");
	int n = 0;
	scanf("%d", &n);
	printf("请输入表达式\n");
	scanf("%s", ch);
	int i = 0;
	char need;
	int flag = 0;
	for (i; i < n;i++)
	{
		switch (ch[i])
		{
		case '[':
		{
			need = ']';
			Push(S1, need);
			S1->Length++;
			break;
		}
		case '(':
		{
			need = ')';
			Push(S1, need);
			S1->Length++;
			break;
		}
		case ']':
		    {
				if (GetTop(S1) == ']')
				{
					ElementType T = Pop(S1);
					S1->Length--;
				}
				else
				{
					flag = 1;
				}
			        break;
		    }
		case ')':
		    {
				if (GetTop(S1) == ')')
				{
					ElementType T = Pop(S1);
					S1->Length--;
				}
				else
				{
					flag = 1;
				}
				break;
		    }
		default:
		    {
				  flag = 1;
			      break;
		    }
		}
	}
	if (S1->Length==0&&flag==0)
		printf("匹配成功\n");
	else
		printf("不匹配\n");
}

版权声明: https://blog.csdn.net/qq_41750725/article/details/79947375

C语言 括号匹配问题

定义一个计数器用来判断正反括号的数量,遇见  {  则count+1,当遇见count不为0且当前字符为 } 时,count-- 若count=0且当前字符为 } 时括号一定不匹配,循环直到EOF,...
  • ZhongQi0808
  • ZhongQi0808
  • 2015-03-18 16:31:22
  • 3353

数据结构07——表达式括号匹配

假设一个括号表达式可以包含3种括号:(),{},[],它们可按任意次序嵌套,编写判断表达式中括号是否正确匹配的程序。若正确匹配输出yes,否则输出no。#include&amp;lt;stdio.h&...
  • chengchencheng
  • chengchencheng
  • 2018-03-31 16:26:31
  • 21

C语言数据结构-桟——括号的匹配检验

#include #include #include #define INIT_STACK_SIZE 20 #define STACK_INCRE_SIZE 10 typedef s...
  • sunshine_rebrith
  • sunshine_rebrith
  • 2017-05-03 11:33:58
  • 323

C程序括号匹配检查

【问题描述】 编写一程序检查C源程序文件中{}、()等括号是否匹配,并输出第一个检测到的不匹配的括号及所对应括号所在的行号(程序中只有一个括号不匹配)。 注意: 1.     除了括号可能不匹配...
  • Jason_Ranger
  • Jason_Ranger
  • 2016-09-20 13:25:09
  • 2531

括号匹配的检验

括号匹配的检验 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:302            测试通过:197 描述 ...
  • suguoliang
  • suguoliang
  • 2017-10-20 20:44:21
  • 238

数据结构之---C语言实现括号匹配(栈实现)

数据结构之---C语言实现括号匹配(栈实现)
  • u012965373
  • u012965373
  • 2015-09-13 20:50:58
  • 7437

C语言实现顺序栈的括号匹配

//顺序栈的使用举例:括号的匹配 #include #include #define OK      1 #define ERROR   0 #define TRUE    1 ...
  • u012913936
  • u012913936
  • 2015-07-08 21:48:46
  • 1710

C++实现算术表达式的括号匹配

C++ 实现算术表达式的括号匹配
  • LY_ysys629
  • LY_ysys629
  • 2017-07-16 09:11:49
  • 523

表达式括号匹配

Problem Description 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意,如([]())或[([][])]等为正确的匹配,[(])或([]()或(()))均为错误的...
  • ruruoran
  • ruruoran
  • 2014-10-05 10:11:23
  • 1805

c语言栈实现括号匹配

在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是否相匹配? 匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号将与最近遇到的那个左括号相匹配。则可以在从左至右扫描...
  • lym152898
  • lym152898
  • 2016-08-12 03:02:41
  • 6667
收藏助手
不良信息举报
您举报文章:栈的括号匹配 C语言
举报原因:
原因补充:

(最多只允许输入30个字)