स्टैक एक लीनियर डेटा स्ट्रक्चर है, जहां डेटा केवल एक छोर पर इन्सर्ट और रिमूव किया जाता है।
एल्गोरिदम
Push ( ) के लिए एल्गोरिदम नीचे दिया गया है:
- स्टैक ओवरफ्लो की जांच करें।
if (top == n-1) printf("stack over flow");
- अन्यथा, स्टैक में एलिमेंट इन्सर्ट करें।
top++ a[top] = item
Pop ( ) के लिए एल्गोरिदम नीचे दिया गया है:
- स्टैक अंडरफ्लो की जांच करें।
if (top == -1) printf("stack under flow");
अन्यथा, स्टैक से एलिमेंट डिलीट करें।
item = a[top] top--
Display ( ) के लिए एल्गोरिदम नीचे दिया गया है:
if (top == -1) printf("stack is empty");
अन्यथा, नीचे दिए गए एल्गोरिदम का पालन करें।
for (i=0; i<=top; i++) printf("%d", a[i]);
स्टैक के अनुप्रयोग
आइए C भाषा में स्टैक के एक्सप्रेशन के रूपांतरण को समझें।
एक्सप्रेशन - यह ऑपरेंड्स और ऑपरेशन्स का एक वैध संयोजन है।
एक्सप्रेशन के प्रकार
C भाषा में तीन प्रकार के एक्सप्रेशन होते हैं जिन पर रूपांतरण और मूल्यांकन किया जा सकता है:
इनफिक्स एक्सप्रेशन - ऑपरेटर ऑपरेंड्स के बीच में होता है। उदाहरण: A+B
प्रीफिक्स एक्सप्रेशन - ऑपरेटर ऑपरेंड्स से पहले होता है। उदाहरण: +AB
पोस्टफिक्स एक्सप्रेशन - ऑपरेटर ऑपरेंड्स के बाद होता है। उदाहरण: AB+
पोस्टफिक्स एक्सप्रेशन का मूल्यांकन
एल्गोरिदम
इनपुट स्ट्रिंग को बाएं से दाएं स्कैन करें।
प्रत्येक इनपुट सिंबल के लिए:
यदि यह एक अंक है, तो इसे स्टैक पर पुश करें।
यदि यह एक ऑपरेटर है, तो स्टैक से शीर्ष दो कंटेंट पॉप करें और उन पर ऑपरेटर लागू करें। बाद में, परिणाम को स्टैक पर पुश करें।
यदि इनपुट सिंबल '\0' है, तो स्टैक को खाली करें।
प्रोग्राम
पोस्टफिक्स एक्सप्रेशन के मूल्यांकन के लिए C प्रोग्राम निम्नलिखित है:
#include<stdio.h>
int top = -1, stack[100];
main (){
char a[50], ch;
int i, op1, op2, res, x;
void push(int);
int pop();
int eval(char, int, int);
printf("enter a postfix expression:");
gets(a);
for(i=0; a[i]!='\0'; i++){
ch = a[i];
if (ch>='0' && ch<='9')
push(ch - '0');
else{
op2 = pop();
op1 = pop();
res = eval(ch, op1, op2);
push(res);
}
}
x = pop();
printf("evaluated value = %d", x);
getch();
}
void push(int n){
top++;
stack[top] = n;
}
int pop(){
int res;
res = stack[top];
top--;
return res;
}
int eval(char ch, int op1, int op2){
switch (ch){
case '+' : return (op1+op2);
case '-' : return (op1-op2);
case '*' : return (op1*op2);
case '/' : return (op1/op2);
}
}
आउटपुट
जब उपरोक्त प्रोग्राम चलाया जाता है, तो यह निम्नलिखित परिणाम देता है:
Run 1: enter a postfix expression: 45+ evaluated value = 9 Run 2: enter a postfix expression: 3 5 2 * + evaluated value = 13