forked from casafurix/c-programs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTwo_Way_Stack(using array).c
More file actions
149 lines (148 loc) · 3.17 KB
/
Two_Way_Stack(using array).c
File metadata and controls
149 lines (148 loc) · 3.17 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
//Problem: Two way Stack implementation using array
#include<stdio.h>
#include<conio.h>
struct TWS //structure for two way stack
{
int capacity;
int top_left,top_right;
int *ptr;
};
struct TWS* creatTwoWayStack(int cap)
{
struct TWS* T=(struct TWS*)malloc(sizeof(struct TWS));
T->capacity=cap;
T->top_left=-1;
T->top_right=cap;
T->ptr=(int*)malloc(sizeof(int)*cap);
return T;
};
void push_left(struct TWS *T)
{
if(T->top_left+1==T->top_right)
printf("Overflow"); //overflow for left stack
else
{
int data;
printf("Enter data = ");
scanf("%d",&data);
T->top_left+=1;
T->ptr[T->top_left]=data;
}
}
void push_right(struct TWS *T)
{
if(T->top_left+1==T->top_right)
printf("Overflow"); // overflow for right stack
else
{
int data;
printf("Enter data = ");
scanf("%d",&data);
T->top_right-=1;
T->ptr[T->top_right]=data;
}
}
void pop_left(struct TWS *T)
{
if(T->top_left== -1)
printf("Underflow"); // underflow for left stack
else
T->top_left-=1;
}
void pop_right(struct TWS *T)
{
if(T->top_right== T->capacity)
printf("Underflow"); // underflow for right stack
else
T->top_right+=1;
}
void peek_left(struct TWS *T)
{
if(T->top_left== -1)
printf("No element present at the left top");
else
printf("Element present at left top = %d",T->ptr[T->top_left]);
}
void peek_right(struct TWS *T)
{
if(T->top_right== T->capacity)
printf("No element present at the right top");
else
printf("Element present at left top = %d",T->ptr[T->top_right]);
}
void display(struct TWS *T)
{
if(T->top_left!=-1)
{
int i=0;
while(i<=T->top_left)
{
printf("%d ",T->ptr[i]);
++i;
}
}
printf("<- Top_Left Top_Right-> ");
if(T->top_right!=T->capacity)
{
int i=T->top_right;
while(i!=T->capacity)
{
printf("%d ",T->ptr[i]);
++i;
}
}
}
int menu()
{
int choice;
printf("\n\nMENU");
printf("\n1. PUSH IN LEFT STACK");
printf("\n2. PUSH IN RIGHT STACK");
printf("\n3. POP FROM LEFT STACK");
printf("\n4. POP FROM RIGHT STACK");
printf("\n5. PEEK INTO LEFT STACK");
printf("\n6. PEEK INTO RIGHT STACK");
printf("\n7. EXIT");
printf("\n\nEnter your choice = ");
scanf("%d",&choice);
return choice;
}
int main()
{
struct TWS *T;
int cap;
printf("Enter capacity of stack = ");
scanf("%d",&cap);
T = creatTwoWayStack(cap);
while(1)
{
system("cls");
display(T);
switch(menu())
{
case 1:
push_left(T);
break;
case 2:
push_right(T);
break;
case 3:
pop_left(T);
break;
case 4:
pop_right(T);
break;
case 5:
peek_left(T);
break;
case 6:
peek_right(T);
break;
case 7:
exit(0);
default:
printf("Invalid Choice, Try Again!");
}
getch();
}
}