数据结构——栈

来源:互联网 发布:淘宝李维斯代购 编辑:程序博客网 时间:2024/05/16 02:35
/*1.用数组栈实现括号匹配




input: ()()[][]{}{}  output:yes
input([])  output:yes
input:([)]  output:no




从main开始,刚开始没思路就从输入开始。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100




typedef struct{
int data[MAXSIZE];
int top;
}ArrayStack;




void init_arraystack(ArrayStack* s) //初始化
{
s->top=-1;
}




void push_arraystack(ArrayStack* s,int data)
{
if(s->top==MAXSIZE-1)//要进栈,第一步要做的就是判断栈有没有满
{
printf("array stack is full");
return;
}
s->top++;
s->data[s->top]=data;
}
int pop_arraystack(ArrayStack* s)
{
int d;
if(s->top==-1)//要出栈,第一步要做的就是判断栈是不是空
{
printf("array stack is empty");
return;
}
d=s->data[s->top];
s->top--;
return d;
}
int main()
{
int i,left;
char input[100]={0};
ArrayStack* s=(ArrayStack*)malloc(sizeof(ArrayStack));
init_arraystack(s);
fgets(input,100,stdin);//用 fgets() 避免gcc编译时用 gets() 出现的警告
for( i=0 ; i<strlen(input) ;i++)//遍历 input 
{
if( input[i]=='{' || input[i]=='[' || input[i]=='(')
push_arraystack(s,input[i]);//要是遇到左括号就把这个左括号放入栈,写到这里就要去定义一个栈的类型ArrayStack
//这个栈的数据放在data[MAXSIZE]里,通过改变top的值去对里面的数据进行操作
//申请这个栈的空间,s是指向这个空间的地址,然后写初始化和进栈的函数
if( input[i]=='}' || input[i]==']' || input[i]==')')
{
left=pop_arraystack(s);//要是遇到右括号就把出栈一个数据拿来比较
if(input[i]>90)//根据各个括号的ascii码来判断
{
if(input[i]-left!=2)
break;
}
else
if(input[i]-left!=1)
break;
}
}
if(i==strlen(input) && s->top==-1)//一旦中途 break ,这个条件就满足,然后就输出no//这里有点小bug(((), 这种情况也会满足,所以要用s->top=-1这个条件
printf("yes\n");
else
printf("no\n");
return 0;
}
0 0
原创粉丝点击