Имплементација стека у C програмирању


Realizacija steka u C programiranju

Uvod

Stek je linearna struktura podataka koja primenjuje LIFO (Last In First Out) princip, što znači da se poslednji uneti element sa steka prvi uklanja. Ovakva struktura ima široku primenu u različitim situacijama, uključujući proveru ispravnosti zagrada, implementaciju rekurzivnih algoritama i obradu matematičkih izraza.

U C programskom jeziku, stekovi se mogu kreirati korišćenjem nizova ili povezanih listi. U ovom tekstu istražićemo kako se stek može implementirati pomoću niza.

Implementacija steka koristeći niz

Realizacija steka upotrebom niza u C programiranju podrazumeva definisanje tipa elemenata koje će stek čuvati, određivanje maksimalne veličine steka i kreiranje potrebnih funkcija za rad sa stekom.

Deklaracija steka

Prvi korak je deklarisanje steka pomoću niza:

      
      #define MAX_SIZE 100 // Maksimalna veličina steka
      int stek[MAX_SIZE]; // Deklaracija niza koji predstavlja stek
      
    

Ovde uvodimo konstantu MAX_SIZE koja postavlja gornju granicu broja elemenata u steku. To pomaže da se izbegne prekoračenje steka. Deklarišemo niz stek tipa int čija je veličina određena konstantom MAX_SIZE.

Operacije steka

Nakon što smo deklarisali stek, potrebno je definisati operacije za rad sa njim.

1. Push operacija (push)

Push operacija dodaje novi element na vrh steka. Ona prihvata jedan argument, a to je vrednost koju želimo da ubacimo u stek:

      
      void push(int vrednost) {
        // Proveravamo da li je stek pun
        if (top == MAX_SIZE - 1) {
          printf("Stek je pun!\n");
          return;
        }
       // Ubacujemo novi element na vrh steka
       stek[++top] = vrednost;
      }
      
    

2. Pop operacija (pop)

Pop operacija uklanja i vraća element sa vrha steka:

      
       int pop(void) {
         // Proveravamo da li je stek prazan
        if (top == -1) {
          printf("Stek je prazan!\n");
          return -1;
        }
       // Uklanjamo i vraćamo element sa vrha steka
       return stek[top--];
      }
      
     

3. Top operacija (top)

Top operacija vraća element sa vrha steka, ali ga ne uklanja:

      
       int top(void) {
         // Proveravamo da li je stek prazan
        if (top == -1) {
          printf("Stek je prazan!\n");
          return -1;
        }
       // Vraćamo element sa vrha steka
       return stek[top];
      }
      
      

4. Prikazivanje steka (display)

Ova operacija prikazuje sadržaj steka od vrha ka dnu:

    
     void display(void) {
      int i;
       // Proveravamo da li je stek prazan
       if (top == -1) {
         printf("Stek je prazan!\n");
         return;
       }
     // Prikazujemo sadržaj steka
      printf("Sadržaj steka: ");
      for (i = top; i >= 0; i--) {
        printf("%d ", stek[i]);
      }
     printf("\n");
    }
    
    

Primer programa

Sledeći C program demonstrira implementaciju steka pomoću niza:

    
    #include <stdio.h>
    #define MAX_SIZE 100

    int stek[MAX_SIZE];
    int top = -1; // Početni vrh steka je -1

    int main() {
      int izbor, vrednost;

      while (1) {
        printf("1. Push\n2. Pop\n3. Top\n4. Prikaz\n5. Izlaz\n\n");
        printf("Unesite vaš izbor: ");
        scanf("%d", &izbor);

        switch (izbor) {
          case 1:
            printf("Unesite vrednost za push: ");
            scanf("%d", &vrednost);
            push(vrednost);
            break;
          case 2:
            vrednost = pop();
            if (vrednost == -1)
              printf("Stek je prazan!\n");
            else
              printf("Pop vrednost: %d\n", vrednost);
            break;
          case 3:
            vrednost = top();
            if (vrednost == -1)
              printf("Stek je prazan!\n");
            else
              printf("Vrednost na vrhu steka: %d\n", vrednost);
            break;
          case 4:
           display();
            break;
          case 5:
            exit(0);
          default:
            printf("Nevažeći izbor!\n");
        }
     }

     return 0;
   }
  
  

Zaključak

Implementacija steka u C programiranju koristeći niz je efikasna i laka za razumevanje. Stek omogućava LIFO pristup elementima, što je veoma korisno u različitim programerskim situacijama. Operacije steka kao što su push, pop, top i prikaz, lako se implementiraju koristeći pokazivač na vrh steka. Implementacija steka pomoću povezane liste je takođe moguća i može biti korisna za složenije strukture podataka.

Česta pitanja (FAQ)

1. Šta je stek u C programiranju?

Stek je linearna struktura podataka koja sledi princip LIFO (Last In First Out).

2. Kako se implementira stek u C programiranju?

Stek se može implementirati u C programiranju korišćenjem niza ili povezane liste.

3. Koje su operacije povezane sa stekom?

Osnovne operacije steka uključuju push (ubacivanje elementa), pop (uklanjanje elementa), top (vraćanje elementa sa vrha) i prikaz (ispisivanje sadržaja steka).

4. Kako proveriti da li je stek pun?

Proveravamo da li je pokazivač na vrh steka veći ili jednak maksimalnoj veličini steka.

5. Kako proveriti da li je stek prazan?

Proveravamo da li je pokazivač na vrh steka manji od nule.

6. Kako ubaciti element u stek?

Koristimo push operaciju i povećavamo pokazivač na vrh steka za jedan.

7. Kako ukloniti element sa steka?

Koristimo pop operaciju i smanjujemo pokazivač na vrh steka za jedan.

8. Kako vratiti element sa vrha steka?

Koristimo top operaciju koja vraća vrednost sa vrha steka.

9. Kako ispisati sadržaj steka?

Iteriramo kroz stek od vrha ka dnu koristeći pokazivač na vrh steka.

10. Koje su primene steka u programiranju?

Stekovi se koriste u proveri ispravnosti zagrada, obradi matematičkih izraza, rekurzivnim algoritmima i u drugim situacijama gde se mora slediti LIFO princip.