স্ট্যাক হল একটি রৈখিক ডেটা স্ট্রাকচার, যেখানে ডেটা ঢোকানো হয় এবং শুধুমাত্র এক প্রান্তে সরিয়ে দেওয়া হয়।
অ্যালগরিদম
নিচে পুশ ( ) এর জন্য একটি অ্যালগরিদম দেওয়া হল −
- স্ট্যাক ওভারফ্লো পরীক্ষা করুন।
if (top = = n-1) printf("stack over flow");
- অন্যথায়, স্ট্যাকের মধ্যে একটি উপাদান প্রবেশ করান।
top ++ a[top] = item
নিচে Pop ( ) এর জন্য একটি অ্যালগরিদম দেওয়া হল −
- স্ট্যাক আন্ডারফ্লো পরীক্ষা করুন।
if (top = = -1) printf("stack under flow");
অন্যথায়, স্ট্যাক থেকে একটি উপাদান মুছুন।
item = a[top] top --
নিচে ডিসপ্লে ( ) −
এর জন্য একটি অ্যালগরিদম দেওয়া হলif (top == -1) printf ("stack is empty");
অন্যথায়, নীচের উল্লিখিত অ্যালগরিদম অনুসরণ করুন৷
৷for (i=0; i<top; i++) printf ("%d", a[i]);
স্ট্যাকের প্রয়োগ
আসুন সি ভাষায় স্ট্যাকের অভিব্যক্তির রূপান্তরগুলি বুঝতে পারি।
অভিব্যক্তি − এটি অপারেন্ড এবং অপারেশনের একটি আইনি সমন্বয়।
অভিব্যক্তির প্রকারগুলি৷
সি ভাষায় তিন ধরনের অভিব্যক্তি রয়েছে যার ভিত্তিতে রূপান্তর এবং মূল্যায়ন করা যেতে পারে। সেগুলি নীচে ব্যাখ্যা করা হয়েছে -
-
ইনফিক্স এক্সপ্রেশন - অপারেটর অপারেন্ডগুলির মধ্যে রয়েছে। উদাহরণস্বরূপ, 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 ABC *D/ +E- +F + - +A/*BCDEF ABC *D / +E –F+
অ্যালগরিদম
ইনপুট স্ট্রিংটি বাম থেকে ডানে স্ক্যান করুন এবং নীচে দেওয়া ধাপগুলি অনুসরণ করুন -
-
ধাপ 1 - যদি ইনপুট চিহ্নটি একটি অপারেন্ড হয়, তাহলে এটি মনিটরে প্রিন্ট করুন।
-
ধাপ 2 − যদি ইনপুট চিহ্ন হয় ‘('তারপর, এটিকে স্ট্যাকের দিকে ঠেলে দিন।
-
ধাপ 3 − যদি ইনপুটটি প্রতীকটি ')' হয়, তাহলে স্ট্যাকের সমস্ত বিষয়বস্তু পপ আউট করুন যতক্ষণ না আপনি '('।
-
ধাপ 4 − যদি ইনপুট চিহ্নটি একটি অপারেটর হয়, তাহলে বর্তমান ইনপুট প্রতীক দিয়ে স্ট্যাকের উপরে অপারেটরের অগ্রাধিকারটি পরীক্ষা করুন৷
যদি স্ট্যাকের শীর্ষের শীর্ষ অগ্রাধিকার বর্তমান চিহ্নের অগ্রাধিকারের চেয়ে বেশি বা সমান হয়, তাহলে স্ট্যাকের বিষয়বস্তুটি পপ আউট করুন এবং বর্তমান প্রতীকটিকে স্ট্যাকের মধ্যে রাখুন।
অন্যথায়, অপারেটরকে স্ট্যাকের দিকে ঠেলে দিন।
-
ধাপ 5 - যদি ইনপুট চিহ্নটি '\0' হয়, তাহলে স্ট্যাকের বিষয়বস্তু খালি না হওয়া পর্যন্ত পপ আউট করুন।
স্ট্যাকের সাহায্যে ইনফিক্সকে পোস্ট ফিক্সে রূপান্তর নীচে দেওয়া হল -