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+

इनफिक्स से पोस्टफिक्स और इनफिक्स से प्रीफिक्स रूपांतरण नीचे समझाया गया है:

Infix to postfix      Infix to prefix
A+ B*C                A+ B*C
A+ BC *               A+ *BC
ABC* +                +A*BC

उदाहरण के लिए,

A+B*C / D-E+F इनफिक्स को पोस्टफिक्स और प्रीफिक्स में बदलें।

Infix to prefix          Infix to postfix
A +B*C / D-E+F           A +B*C / D-E+F
A +*BC / D-E+F           A +BC* / D-E+F
A + / *BCD -E+F          A +BC*D /-E+F
+A /*BCD -E +F           ABC *D /+ -E+F
-+A/*BCDE +F             + - +A/*BCDEF
ABC *D / +E–F+

एल्गोरिदम

इनपुट स्ट्रिंग को बाएं से दाएं स्कैन करें और नीचे दिए गए चरणों का पालन करें:

  • चरण 1 - यदि इनपुट सिंबल ऑपरेंड है, तो इसे मॉनिटर पर प्रिंट करें।

  • चरण 2 - यदि इनपुट सिंबल '(' है, तो इसे स्टैक पर पुश करें।

  • चरण 3 - यदि इनपुट सिंबल ')' है, तो स्टैक के सभी कंटेंट को तब तक पॉप करें जब तक '(' न मिल जाए।

  • चरण 4 - यदि इनपुट सिंबल ऑपरेटर है, तो स्टैक के शीर्ष पर ऑपरेटर की प्राथमिकता की तुलना वर्तमान इनपुट सिंबल से करें।

यदि स्टैक के शीर्ष की प्राथमिकता वर्तमान सिंबल की प्राथमिकता से अधिक या बराबर है, तो स्टैक की सामग्री को पॉप करें और वर्तमान सिंबल को स्टैक में डालें।

अन्यथा, ऑपरेटर को स्टैक पर पुश करें।

  • चरण 5 - यदि इनपुट सिंबल '\0' है, तो स्टैक की सामग्री को तब तक पॉप करें जब तक यह खाली न हो जाए।

स्टैक की मदद से इनफिक्स से पोस्टफिक्स रूपांतरण नीचे दिया गया है:

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


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


  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; // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें मेमोरी आर