-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparenthesis.c
More file actions
113 lines (112 loc) · 2.09 KB
/
parenthesis.c
File metadata and controls
113 lines (112 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <stdio.h>
#include <stdlib.h>
struct stack{
int size;
int top;
char *arr;
};
int empty(struct stack *ptr){
if(ptr -> top == -1){
return 1;
}
else{
return 0;
}
}
int full(struct stack*ptr){
if(ptr ->top == ptr-> size-1 ){
return 1;
}
else {
return 0;
}
}
int stacktop(struct stack*s){
return( s-> arr[s->top]);
}
int stackbottom(struct stack*s){
return(s->arr[0]);
}
void push(struct stack*ptr , char value){
if(full(ptr)){
printf("stack overflow \n");
}
else{
ptr -> top ++;
ptr -> arr[ptr->top]= value;
}
}
char pop(struct stack*ptr){
if(empty(ptr)){
printf("stack underflow");
return '\0';
}
else{
char value = ptr->arr[ptr->top];
ptr-> top--;
return value;
}
}
int peek(struct stack*s, char i){
if(s->top - i+1 <0){
printf("invalid position \n");
return -1;
}
else{
return (s-> arr[s->top - i +1]);
}
}
int match (char a , char b){
if(a=='(' && b==')'){
return 1;
}
if(a=='{' && b=='}'){
return 1;
}
if(a=='[' && b==']'){
return 1;
}
return 0;
}
int parenthesis(char*exp){
struct stack*sp;
sp->size= 10;
sp->top= -1;
sp->arr=(char*)malloc(sp->size*sizeof(char));
char popped;
for (int i = 0; exp[i]!= '\0'; i++)
{
if (exp[i]=='(' || exp[i]=='{' || exp[i]=='['){
push(sp,exp[i]);
}
else if(exp[i]==')'|| exp[i]=='}' || exp[i]==']'){
if(empty(sp)){
free(sp->arr);
free(sp);
return 0;
}
else{
popped = pop(sp);
if(!match(popped, exp[i])){
return 0;
}
}
}
}
if(empty(sp)){
return 1;
}
else{
return 0;
}
}
int main(){
char*exp = "8*(9-6)}][";
if(parenthesis(exp)){
printf("it is matching");
}
else{
printf("it is not matching");
}
return 0;
}