C语言数据结构关于栈的题

输入一个由字符'('和‘)’构成的字符串,请编程判断该字符串中的括号是否匹配并计算匹配时括号最深有多少层。
输入
一个由‘(‘,’)’构成的字符串(长度不超过200)。

输出

若括号不匹配输出-1,否则输出括号的最大层数。
样例输入
(((()(()))))

样例输出
5

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

typedef int DataType;
typedef struct node{
DataType data;
struct node * next;
}Stack;

Stack* CreateStack(); //创建栈
void StackEmpty(Stack* ); //清空栈
void DestoryStack(Stack*); //撤销(删除)栈
int IsEmpty(Stack*); //判空
int PushStack(Stack*, DataType); //入栈
int PopStack(Stack*); //出栈
DataType GetTopElement(Stack*); //取栈顶元素

Stack* CreateStack()
{
Stack *stack = (Stack*)malloc(sizeof(Stack));
if(NULL != stack)
{
stack->next = NULL;
return stack;
}
printf("out of place.\n");
return NULL;
}

//清空栈
void StackEmpty(Stack* stack)
{
while(!IsEmpty(stack))
{
PopStack(stack);
}
printf("now stack is empty. \n");
}

//撤销栈
void DestoryStack(Stack* stack)
{
free(stack);
exit(0);
}

int IsEmpty(Stack* stack)
{
return (stack->next == 0);
}

//入栈,成功返回1,失败返回0, 把元素 data 存入 栈 stack 中
int PushStack(Stack* stack, DataType data)
{
Stack* newst = (Stack*)malloc(sizeof(Stack));
if(NULL != newst)
{
newst->data = data;
newst->next = stack->next; //s->next = NULL;
stack->next = newst;
return 1;
}
printf("out of place PushStack.\n");
return 0;
}

/*
出栈,成功返回1,失败返回0,出栈不取出元素值,只是删除栈顶元素。
如出栈要实现,取出元素值,并释放空间,可结合取栈顶元素函数做修改,这里不再给出。
*/

int PopStack(Stack* stack)
{
Stack* tmpst;
if(!IsEmpty(stack))
{
tmpst = stack->next;
stack->next = tmpst->next;
free(tmpst);
return 1;
}
return 0;
}

//取栈顶元素,仅取出栈顶元素的值,取出之后,该元素,任然存在栈中。成功返回元素值,失败输出提示信息,并返回 -1
DataType GetTopElement(Stack* stack)
{
if(!IsEmpty(stack))
{
return stack->next->data;
}
printf("stack is empty GetTopElement.\n");
return -1;
}

int main()
{
Stack* stack = CreateStack();
char str[200];
printf("请输入字符串:");
scanf("%s", str);
int num = 0;
for (int i = 0; i < strlen(str); i++) {
if (!IsEmpty(stack) && GetTopElement(stack) == '(' && str[i] == ')') {
PopStack(stack);
num++;
} else {
PushStack(stack, str[i]);
}
}
if (!IsEmpty(stack)) {
num = -1;
}
printf("匹配结果:%d", num);
DestoryStack(stack);
return 1;
}
温馨提示:答案为网友推荐,仅供参考