Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में लिंक्ड लिस्ट का उपयोग करके स्टैक समझाना

डायनामिक रूप से मेमोरी आवंटित करके स्टैक ओवरफ्लो और स्टैक अंडरफ्लो से बचा जा सकता है।

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
  1. C भाषा में कैरेक्टर ऑपरेशन्स को समझें C भाषा में कैरेक्टर ऑपरेशन्स को समझें

    C प्रोग्रामिंग भाषा में कैरेक्टर (A-Z या a-z), अंक (0-9), व्हाइट स्पेस, या विशेष प्रतीक हो सकते हैं। घोषणा (Declaration) C प्रोग्रामिंग में कैरेक्टर ऑपरेशन्स के लिए घोषणा निम्नलिखित है: char a = A; // कैरेक्टर कॉन्स्टेंट का उपयोग करके कैरेक्टर इनपुट/आउटपुट फंक्शन्स कैरेक्टर इनपुट/आउटपुट फंक्शन्स

  1. C में लिंक्ड लिस्ट का उपयोग करके प्रायोरिटी क्यू (Priority Queue) C में लिंक्ड लिस्ट का उपयोग करके प्रायोरिटी क्यू (Priority Queue)

    हमें डेटा और पूर्णांक मान के रूप में प्राथमिकता दी गई है और कार्य दी गई प्राथमिकता के अनुसार एक लिंक्ड लिस्ट बनाना और परिणाम प्रदर्शित करना है। क्यू एक FIFO डेटा संरचना है जिसमें पहले डाला गया तत्व हटाया जाने वाला पहला होता है। एक प्रायोरिटी क्यू एक प्रकार की क्यू है जिसमें तत्वों को प्राथमिकता के

  1. C भाषा में लिंक्ड लिस्ट के वैकल्पिक नोड्स प्रिंट करना (इटरेटिव मेथड) C भाषा में लिंक्ड लिस्ट के वैकल्पिक नोड्स प्रिंट करना (इटरेटिव मेथड)

    इस समस्या में, प्रोग्राम को दी गई लिंक्ड लिस्ट से वैकल्पिक नोड्स प्रिंट करने होंगे यानी एक छोड़कर एक प्रिंट करना, इटरेटिव मेथड का उपयोग करके। इटरेटिव मेथड वह है जो आमतौर पर लूप का उपयोग करता है जो तब तक निष्पादित होता है जब तक कंडीशन का मान 1 या सत्य रहता है। मान लें, लिस्ट में नोड्स 29, 34, 43,