#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表示不合法
}
栈-顺序栈以及其算法
最新推荐文章于 2022-04-19 19:26:27 发布