数据结构3.2/*2编写程序,读入一个字符串,其中包含{}、[]、()三种括号,检查该字符串中的括号是否正确匹配。 提示: 依次读入每个字符。(1)若遇到左括号,压栈。

/*2编写程序,读入一个字符串,其中包含{}、[]、()三种括号,检查该字符串中的括号是否正确匹配。
提示:
依次读入每个字符。(1)若遇到左括号,压栈。
(2)若遇到右括号,检查栈顶的左括号:若与右括号匹配,则弹出栈顶左括号;
若不匹配,说明匹配错误;若栈中无内容,说明匹配错误。
(3)若遇到其他符号,忽略之。
(4)若字符串已读完,此时栈中仍有内容,说明匹配错误。*/

#include
#include


struct Stack {
    int * Data;   // 栈空间
    int Top;      // 栈顶,为-1时表示空栈
    int MaxSize; //栈的最大容量
};

struct Stack* Create()
{
	struct Stack *L;
	L=(struct Stack*)malloc(sizeof(struct Stack));
	L->MaxSize=200;
	L->Top=-1;
	L->Data=(int *)malloc(sizeof(int)*L->MaxSize);
	return L; 
};

void Push(struct Stack *L,int n)
{
	if(L->Top==L->MaxSize-1){
		return;
	}
	L->Data[++L->Top]=n;
};

int Pop(struct Stack *L)
{
	if(L->Top==-1)
	{
		return;
	}
	return L->Data[L->Top--];
}

int main()
{
	int i=0,n=1,x=1;
	char S[100];
	gets(S);
	
	struct Stack *L;
	L=Create();
	while(S[i]!='\0')
	{
		switch(S[i])
		{
			case '(': Push(L,'(');break;
			case ')': n=Pop(L);
					  if(n!=40)
					  	x=-1;
					  break;
			
			case '[': Push(L,'[');break;
			case ']': n=Pop(L);
					  if(n!=91)
					  	x=-1;
					  break;
					  
			case '{': Push(L,'{');break;
			case '}': n=Pop(L);
					  if(n!=123)
					  	x=-1;
					  break;
		}
		i++;
		if(x==-1)
			break;
	}
	
	if(x==-1||L->Top!=-1)
		printf("匹配错误\n");
	else
		printf("匹配成功\n");
	return 0;
	
}

primecode

/*2编写程序,读入一个字符串,其中包含{}、[]、()三种括号,检查该字符串中的括号是否正确匹配。
提示:
依次读入每个字符。(1)若遇到左括号,压栈。
(2)若遇到右括号,检查栈顶的左括号:若与右括号匹配,则弹出栈顶左括号;
若不匹配,说明匹配错误;若栈中无内容,说明匹配错误。
(3)若遇到其他符号,忽略之。
(4)若字符串已读完,此时栈中仍有内容,说明匹配错误。*/

#include
#include
#include
struct Stack {
    int * Data;   // 栈空间
    int Top;      // 栈顶,为-1时表示空栈
    int Maxsize; //栈的最大容量
};
struct Stack* Creat(){
		struct Stack*L;
		L=(struct Stack*)malloc(sizeof(struct Stack));
		L->Top=-1;
		L->Maxsize=200;	
		L->Data=(int*)malloc(sizeof(int)*L->Maxsize);
		return L;
	}
int Pop(struct Stack*L){
		if(L->Top==-1){
		printf("Stack is empty\n");
		}
		return L->Data[L->Top--];
}
void Push(struct Stack*L,int x){
	if(L->Top==L->Maxsize-1){
		printf("Stack is Full\n");
		return;
	}
	L->Data[++L->Top]=x;
}
int main(){
		int i=0,sum=0,j,k,n,t;
		char s[100];
		gets(s);
		struct Stack *L;
		L=Creat();
		while(s[i]!='\0'){
			switch(s[i]){
				case'(':Push(L,'(');break;
				case')':n=Pop(L);
							if(n!=40)
								    t=0;
							break;
						
				case'[':Push(L,'[');break;
				case']':n=Pop(L);
							if(n!=91)
								t=0;
							break;
							
				case'{':Push(L,'{');break;
				case'}':n=Pop(L);
							if(n!=123)
								t=0;
							break;
				}
			i++;
			}
   if(t==0){
    printf("匹配错误");
    }
			if(L->Top!=-1){
				printf("匹配错误"); 
			}
		return 0;
	}


你可能感兴趣的:(笔记)