डायनामिक रूप से मेमोरी आवंटित करके स्टैक ओवरफ्लो और स्टैक अंडरफ्लो से बचा जा सकता है।
C प्रोग्रामिंग भाषा में स्टैक के तहत किए जाने वाले ऑपरेशन निम्नलिखित हैं:
- पुश (Push)
- पॉप (Pop)
पुश
लिंक्ड लिस्ट का बेसिक इम्प्लीमेंटेशन निम्नलिखित है:
&item = 10 newnode = (node*) malloc (sizeof (node)); newnode->data = item; newnode->link = NULL; newnode->link = start; start = newnode;
पॉप
सिंटैक्स निम्नलिखित है:
if (start == NULL)
printf("डिलीशन संभव नहीं। लिस्ट खाली है")
else {
temp = start;
start = start->link;
free(temp);
}
प्रोग्राम
लिंक्ड लिस्ट का उपयोग करके स्टैक के लिए C प्रोग्राम:
#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 विकल्प दर्ज करें: ");
scanf("%d", &ch);
switch (ch) {
case 1:
printf("एलिमेंट दर्ज करें: ");
scanf("%d", &no);
push(no);
break;
case 2:
pop();
break;
case 3:
if (top == NULL)
printf("स्टैक खाली है");
else {
e = topelement();
printf("\n टॉप एलिमेंट: %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("गलत विकल्प: फिर से कोशिश करें ");
break;
}
}
}
// खाली स्टैक
void create() {
top = NULL;
}
void stack_count() {
printf("\n स्टैक में एलिमेंट्स की संख्या: %d", count);
}
// डेटा पुश करें
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("खाली स्टैक");
return;
}
while (top1 != NULL) {
printf("%d ", top1->info);
top1 = top1->ptr;
}
}
void pop() {
top1 = top;
if (top1 == NULL) {
printf("\n त्रुटि");
return;
} else
top1 = top1->ptr;
printf("\n पॉप्ड मान: %d", top->info);
free(top);
top = top1;
count--;
}
int topelement() {
return(top->info);
}
// स्टैक खाली है या नहीं जांचें
void empty() {
if (top == NULL)
printf("\n खाली स्टैक");
else
printf("\n स्टैक खाली नहीं है, %d मानों के साथ", count);
}
void destroy() {
top1 = top;
while (top1 != NULL) {
top1 = top->ptr;
free(top);
top = top1;
top1 = top1->ptr;
}
free(top1);
top = NULL;
printf("\n सभी नष्ट हो गए");
count = 0;
}
आउटपुट
1 - Push 2 - Pop 3 - Top 4 - Empty 5 - Exit 6 - Display 7 - Stack Count 8 - Destroy stack विकल्प दर्ज करें: 1 एलिमेंट दर्ज करें: 23 विकल्प दर्ज करें: 1 एलिमेंट दर्ज करें: 45 विकल्प दर्ज करें: 1 एलिमेंट दर्ज करें: 56 विकल्प दर्ज करें: 2 पॉप्ड मान: 56 विकल्प दर्ज करें: 6 45 23 विकल्प दर्ज करें: 8 सभी नष्ट हो गए विकल्प दर्ज करें: 6 खाली स्टैक विकल्प दर्ज करें: 5