Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में स्टैक का उपयोग करके एक्सप्रेशन का मूल्यांकन


स्टैक एक लीनियर डेटा स्ट्रक्चर है, जहां डेटा केवल एक छोर पर इन्सर्ट और रिमूव किया जाता है।

एल्गोरिदम

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

  1. C भाषा में कैरेक्टर ऑपरेशन्स को समझें C भाषा में कैरेक्टर ऑपरेशन्स को समझें

    C प्रोग्रामिंग भाषा में कैरेक्टर (A-Z या a-z), अंक (0-9), व्हाइट स्पेस, या विशेष प्रतीक हो सकते हैं। घोषणा (Declaration) C प्रोग्रामिंग में कैरेक्टर ऑपरेशन्स के लिए घोषणा निम्नलिखित है: char a = A; // कैरेक्टर कॉन्स्टेंट का उपयोग करके कैरेक्टर इनपुट/आउटपुट फंक्शन्स कैरेक्टर इनपुट/आउटपुट फंक्शन्स

  1. C भाषा में यूनियन टू पॉइंटर (Union to Pointer) C भाषा में यूनियन टू पॉइंटर (Union to Pointer)

    यूनियन (Union) क्या है? यूनियन एक यूजर-डिफाइंड डेटा प्रकार है जो एक ही मेमोरी स्थान को विभिन्न डेटा प्रकारों के सदस्यों के लिए साझा करने की अनुमति देता है। किसी भी समय केवल एक सदस्य ही मान रख सकता है। यूनियन की घोषणा union यूनियन_नाम { डेटा_प्रकार सदस्य1; डेटा_प्रकार सदस्य2; // ... };

  1. C भाषा में पॉइंटर एक्सेस करने की अवधारणा C भाषा में पॉइंटर एक्सेस करने की अवधारणा

    पॉइंटर घोषणा, प्रारंभिकरण और एक्सेस 1. सामान्य चर int qty = 179; // मेमोरी में: पता 1000 पर मान 179 संग्रहीत 2. पॉइंटर घोषणा int *p; // p एक पॉइंटर चर है जो int का पता रख सकता है 3. पॉइंटर प्रारंभिकरण int qty = 175; int *p; p = &qty; // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें मेमोरी आर