本题目要求判断输入的字符串中小括号是否配对。
#include <stdio.h>
#include <string.h>
typedef char DataType;
/*栈中允许存储的元素的最大个数*/
#define STACKSIZE 100
/* 顺序栈的定义 */
typedef struct
{
DataType items[STACKSIZE]; /*存放栈中元素的一维数组*/
int top; /*用来存放栈顶元素的下标*/
}SqStack;
int InitSqStack(SqStack* S)
{
S->top = -1;
return 1;
}
int SqStackPush(SqStack* S, DataType e)
{
if (S->top == STACKSIZE - 1)
return 0; /*栈已满*/
S->top++;
S->items[S->top] = e;
return 1;
}
int SqStackPop(SqStack* S, DataType* e)
{ /* 将栈S的栈顶元素弹出,放到e所指的存储空间中 */
if (S->top == -1) /* 栈为空 */
return 0;
*e = S->items[S->top]; /* 将栈顶元素带回来 */
S->top--; /* 修改栈顶指针 */
return 1;
}
int SqStackEmpty(SqStack S)
{/* S为顺序栈 */
if (S.top == -1)
return 1;
else
return 0;
}
int MatchBrackets(char a[], int n)
{
SqStack s;
DataType x;
int i;
InitSqStack(&s);
for (i = 0; i < n; i++)
{
if (a[i] == '(')
SqStackPush(______);
else if (______)
SqStackPop(______);
}
if (______)
return 1;
else
return 0;
}
int main()
{
char a[100];
int n = 0;
int rst;
gets(a);
n = ______;
rst = MatchBrackets(a, n);
if (rst == 1)
printf("字符串中的小括号是成对的");
else
printf("字符串中的小括号不是成对的");
return 0;
}
———————————————————————————————————————————解题思路及代码:
进行'('和')'数目的判别;
代码:
#include <stdio.h>
#include <string.h>
typedef char DataType;
/*栈中允许存储的元素的最大个数*/
#define STACKSIZE 100
/* 顺序栈的定义 */
typedef struct
{
DataType items[STACKSIZE]; /*存放栈中元素的一维数组*/
int top; /*用来存放栈顶元素的下标*/
}SqStack;
int InitSqStack(SqStack* S)
{
S->top = -1;
return 1;
}
int SqStackPush(SqStack* S, DataType e)
{
if (S->top == STACKSIZE - 1)
return 0; /*栈已满*/
S->top++;
S->items[S->top] = e;
return 1;
}
int SqStackPop(SqStack* S, DataType* e)
{ /* 将栈S的栈顶元素弹出,放到e所指的存储空间中 */
if (S->top == -1) /* 栈为空 */
return 0;
*e = S->items[S->top]; /* 将栈顶元素带回来 */
S->top--; /* 修改栈顶指针 */
return 1;
}
int SqStackEmpty(SqStack S)
{/* S为顺序栈 */
if (S.top == -1)
return 1;
else
return 0;
}
int MatchBrackets(char a[], int n)
{
SqStack s;
DataType x;
int i;
InitSqStack(&s);
for (i = 0; i < n; i++)
{
if (a[i] == '(')
SqStackPush(&s,a[i]);//*1
else if (a[i]==')')//*2
SqStackPop(&s,&x);//*3
}
if (SqStackEmpty(s))//*4
return 1;
else
return 0;
}
int main()
{
char a[100];
int n = 0;
int rst;
gets(a);
n = strlen(a);//*5
rst = MatchBrackets(a, n);
if (rst == 1)
printf("字符串中的小括号是成对的");
else
printf("字符串中的小括号不是成对的");
return 0;
}