写了一个括号匹配的问题,典型的栈。
但是这道题目不只是用到了栈,一开始的巧妙的配对就已经够厉害了,下面用到的栈的知识和代码我反而觉得好想。有时候是这样的,你的切入方式决定了这道题目对于你来说的难度。
如果用python就有直接的函数用压栈、出站,但是c要你自己写的。
emmm,但是我写的也不好。
终于能把这篇文章发出来了,以下是栈的一些实现。
//所以还是要写写栈了
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int ElemType;
typedef int State;
typedef struct
{
ElemType data[MAXSIZE];
int top;
}SqStack;
//顺序栈的存储结构,最大值MAXSIZE为栈满的条件
//top为栈顶指针
//初始化顺序栈
State initStack(SqStack *S)
{
S->top = -1; //将栈顶指针设为-1,即将栈作为还是空着的时候
return OK;
}
//获得顺序栈的长度
int getLength(SqStake *S)
{
return (S.top)+1; //根据下标的规则,数组中的长度为指针+1个元素
}
//清空栈
State clearStack(SqStack *S)
{
s->top = -1; //将栈顶指针重新设置为-1,则表示栈空
return OK;
}
//判断顺序栈是否为空
State isEmpty(SqStack *S)
{
if( S.top == -1)
{
return TRUE;
}
else
{
return FALSE;
}
}
//入栈
State push(SqStack *S, ElemType *e)
{
if(S->top == MAXSIZE-1)
{
printf("栈满\n");
return FALSE;
}
else
{
S->top++; //栈顶指针加一表示指向一个新的顶部空间
S->data[S->top] = e; //将现在指向的元素设置为e
return OK;
}
}
//出栈
State pop(SqStack *S, ElemType *e)
{
if (S->top == -1)
{
printf("栈空\n");
return ERROR;
}
else
{
*e = S->data[S->top];
S->top--;
return OK;
}
}
//获取栈顶元素,只查看不出栈
State getTop(SqStack S, ElemType *e)
{
if(S.top == -1)
{
printf("栈满\n");
return ERROR;
}
else
{
*e = S.data[S.top];
}
}