栈-顺序栈以及其算法

#include <stdio.h>
#define Max 100
//结构体
typedef struct Stack{
	int data[Max];
	int top;
}Stack;

//初始化栈
void init(Stack ** stack){//传入二级指针
	(*stack) = (Stack*)malloc(sizeof(stack));
	(*stack)->top = -1; //将顶端位置赋值-1
}

//判断栈空
int isEmpty(Stack * stack){
	if(stack->top==-1){//初始化时top为-1
		return 1;//栈空
	}else{
		return 0;//栈不空
	}
}

//判断栈满
int isFull(Stack * stack){
	if(stack->top == Max-1){//最大的下标位置是max-1
		return 1;//栈满
	}else{
		return 0;//栈不满
	}
}
//入栈
int push(Stack stack,int x){
	if(isFull(stack)){//先判断是否栈满
		return 0;//栈满则入栈失败
	}else{//栈没满则入栈
		stack->data[++stack->top] = x;//先移动top在入栈
		return 1;
	}
}

//出栈
int pop(Stack * stack,int * x){
	if(isEmpty(stack)){//判断是否栈空
		return 0;//栈空则出栈失败
	}else{栈不空则出栈
		(*x) = stack->data[stack->top--];//将栈顶值赋值给X;赋值完后将top-1;
		return 1;
	}
}

//一个算术表达式存放在一个数组中,判断该算数表达式的括号是否合法,用顺序栈可以实现(括号匹配算法)
int function1(int arr[],int n){
	 Stack * stack;
    initStack(&stack);//初始化栈
    int i;//用于循环arr数组
    char c;//用于接收arr数组元素
    int e;//接收出栈元素
    for(i=0;i<n;i++){
        c = arr[i];
        if(c == '('){//如果是左括号则入栈
            push(stack,arr[i]);
        }else if(c == ')'){//如果是右括号则出栈
            pop(stack,&e);
        }
    }
    if(isEmpty(stack)){//如果最后栈空则代表合法
        return 1;   
    }
    return 0;//此时表示栈不空返回0表示不合法
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值