গতিশীলভাবে মেমরি বরাদ্দ করে স্ট্যাক ওভার ফ্লো এবং স্ট্যাক আন্ডার ফ্লো এড়ানো যায়।
সি প্রোগ্রামিং ভাষায় স্ট্যাকের অধীনে পরিচালিত অপারেশনগুলি নিম্নরূপ -
- ধাক্কা
- পপ
ধাক্কা
নিম্নলিখিত একটি লিঙ্ক করা তালিকার মৌলিক বাস্তবায়ন −
&item = 10 newnode = (node*) malloc (sizeof (node)); newnode ->data = item; newnode ->link = NULL; newnode ->link = start; start = newnode;
পপ
সিনট্যাক্স নিম্নরূপ -
সিনট্যাক্স
if (start = = NULL) printf("Deletion is not possible.List is empty") else{ temp = start; start = start link; free (temp); }
প্রোগ্রাম
লিঙ্কযুক্ত তালিকাগুলি ব্যবহার করে স্ট্যাকের জন্য সি প্রোগ্রামটি নিচে দেওয়া হল −
#include <stdio.h> #include <stdlib.h> struct node{ int info; struct node *ptr; }*top,*top1,*temp; int topelement(); void push(int data); void pop(); void empty(); void display(); void destroy(); void stack_count(); void create(); int count = 0; void main(){ int no, ch, e; printf("\n 1 - Push"); printf("\n 2 - Pop"); printf("\n 3 - Top"); printf("\n 4 - Empty"); printf("\n 5 - Exit"); printf("\n 6 - Display"); printf("\n 7 - Stack Count"); printf("\n 8 - Destroy stack"); create(); while (1){ printf("\n Enter choice : "); scanf("%d", &ch); switch (ch){ case 1: printf("Enter element : "); scanf("%d", &no); push(no); break; case 2: pop(); break; case 3: if (top == NULL) printf("stack is empty"); else{ e = topelement(); printf("\n Top element : %d", e); } break; case 4: empty(); break; case 5: exit(0); case 6: display(); break; case 7: stack_count(); break; case 8: destroy(); break; default : printf(" wrong choice:Try again "); break; } } } //empty stack void create(){ top = NULL; } void stack_count(){ printf("\n no: of elements in stack : %d", count); } //push data void push(int data){ if (top == NULL){ top =(struct node *)malloc(1*sizeof(struct node)); top->ptr = NULL; top->info = data; } else{ temp =(struct node *)malloc(1*sizeof(struct node)); temp->ptr = top; temp->info = data; top = temp; } count++; } void display(){ top1 = top; if (top1 == NULL){ printf("empty stack"); return; } while (top1 != NULL){ printf("%d ", top1->info); top1 = top1->ptr; } } void pop(){ top1 = top; if (top1 == NULL){ printf("\n error"); return; } else top1 = top1->ptr; printf("\n Popped value : %d", top->info); free(top); top = top1; count--; } int topelement(){ return(top->info); } //check stack empty or not void empty(){ if (top == NULL) printf("\n empty stack"); else printf("\n stack not empty with %d values", count); } void destroy(){ top1 = top; while (top1 != NULL){ top1 = top->ptr; free(top); top = top1; top1 = top1->ptr; } free(top1); top = NULL; printf("\n all are destroyed"); count = 0; }
আউটপুট
যখন উপরের প্রোগ্রামটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -
1 - Push 2 - Pop 3 - Top 4 - Empty 5 - Exit 6 - Display 7 - Stack Count 8 - Destroy stack Enter choice: 1 Enter element: 23 Enter choice: 1 Enter element: 45 Enter choice: 1 Enter element: 56 Enter choice: 2 Popped value: 56 Enter choice: 6 45 23 Enter choice: 8 all are destroyed Enter choice: 6 empty stack Enter choice: 5