【数据结构——栈与队列】(C语言)括号匹配问题

  • 问题描述

已知以字符型顺序表表示的表达式含有三种扩号“(”、“)”、“ “[” 、“]” 、“{” 和“}” ,它们可嵌套使用,试写出算法判断给定表达式中所含扩号是否正确配对出现。

  • 代码实现

#include<stdio.h>
#include<stdlib.h>

typedef struct LNode
{
	char data;
	struct LNode *next;
}LNode;

void Push(LNode *s,char a);
int Pop(LNode *s,char *a);

int main(void)
{
	char read='r',judge='j',*j;
	j=&judge;
	LNode *s;
	s=(LNode*)malloc(sizeof(LNode));
	s->data='S';
	s->next=NULL;
	printf("请输入表达式:\n");
	while( read!='\n' )
	{
		read=getchar(); 
		if( read == '(' || read =='[' || read =='{' )	Push(s,read);
		if( read == ')' || read ==']' || read =='}' )
		{
			if(Pop(s,j))
			{
				switch (*j)
				{		
					case '(' :	judge=')';	break;
					case '[' :	judge=']';	break;
					case '{' :	judge='}';	break;		
				}
				if(judge!=read)
				{
					printf("ERROR! 不匹配!!!");
					break; 
				}
			}
			else 
			{
				printf("ERROR! 不匹配!!!");
				break;
			}
		}
	}
	if(s->next==NULL&&read=='\n')	printf("RIGHT! 匹配!!!");
	else if(s->next!=NULL&&read=='\n')	printf("ERROR! 不匹配!!!");
	return 0;
}

void Push(LNode *s,char a)
{
	LNode *r=(LNode*)malloc(sizeof(LNode));
	r->next=NULL;
	r->data=a;
	r->next=s->next;
	s->next=r;	
}

int Pop(LNode *s,char *a)
{
	LNode *p; 
	if(s->next!=NULL)
	{
		p=s->next;
		*a=p->data;
		s->next=p->next;
		free(p);
		return 1;
	}
	else return 0;
}
  • 知识总结

  1. 栈的定义:一种只能在一端进行插入或删除操作的线性表。
  2. 栈的特点:先进后出。
  3. 存储结构:顺序栈和链式栈。
  4. 当n个元素以某种顺序进栈,并且可在任意时刻出栈时,所获得元素排列的数目恰好满足函数Catalan()的计算,               即N=\tiny \frac{2n*(2n-1)****(2n-n+1)}{(n+1)!}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值