স্ট্যাক হল একটি রৈখিক ডেটা স্ট্রাকচার, যেখানে ডেটা ঢোকানো হয় এবং শুধুমাত্র এক প্রান্তে সরিয়ে দেওয়া হয়।
অ্যালগরিদম
নীচে পুশ ( ) -
এর জন্য একটি অ্যালগরিদম দেওয়া হল- স্ট্যাক ওভারফ্লো পরীক্ষা করুন।
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]);
স্ট্যাকের প্রয়োগ
আসুন সি ভাষায় স্ট্যাকের অভিব্যক্তির রূপান্তরগুলি বুঝতে পারি।
অভিব্যক্তি - এটি অপারেন্ড এবং অপারেশনের একটি আইনি সমন্বয়।
অভিব্যক্তির প্রকারগুলি
সি ভাষায় তিন ধরনের অভিব্যক্তি রয়েছে যার ভিত্তিতে রূপান্তর এবং মূল্যায়ন করা যেতে পারে। সেগুলি নীচে ব্যাখ্যা করা হয়েছে -
-
ইনফিক্স এক্সপ্রেশন - অপারেটর অপারেন্ডগুলির মধ্যে রয়েছে। উদাহরণস্বরূপ, 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('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