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.