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

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

Увод

Стек је линеарна структура података која следи принцип LIFO (Last In First Out), што значи да се последњи елемент унет у стек први избацује. Ова структура је веома корисна у различитим ситуацијама, као што су балансирање заграда, рекурзивни алгоритми и обрада израза.

У C програмирању, стекови се могу имплементирати користећи низ или листу. У овом чланку ћемо истражити како имплементирати стек користећи низ.

Имплементација стека користећи низ

Имплементација стека користећи низ у C програмирању укључује одређивање типа елемената који чува стек, дефинисање величине стека и аритметичких операција за управљање стеком.

Декларација стека

Први корак је декларација стека помоћу низа:

c
#define MAX_SIZE 100 // Максимална величина стека
int stack[MAX_SIZE]; // Декларација низа који представља стек

Овде дефинишемо константу MAX_SIZE која представља максималну величину стека. Ово нам помаже да избегнемо прекорачење граница стека. Декларишемо низ stack типа int са величином MAX_SIZE.

Операције стека

Након што декларишемо стек, морамо дефинисати операције за манипулацију стеком.

1. Пуш операција (push)

Пуш операција убацује нови елемент на врх стека. Она прима један аргумент, вредност коју желимо да убацимо у стек:

c
void push(int value) {
// Проверавамо да ли је стек пун
if (top == MAX_SIZE - 1) {
printf("Стек је пун!\n");
return;
}

// Убацујемо нови елемент на врх стека
stack[++top] = value;
}

2. Поп операција (pop)

Поп операција уклања и враћа елемент са врха стека:

c
int pop(void) {
// Проверавамо да ли је стек празан
if (top == -1) {
printf("Стек је празан!\n");
return -1;
}

// Уклањамо и враћамо елемент са врха стека
return stack[top--];
}

3. Топ операција (top)

Топ операција враћа елемент са врха стека без уклањања:

c
int top(void) {
// Проверавамо да ли је стек празан
if (top == -1) {
printf("Стек је празан!\n");
return -1;
}

// Враћамо елемент са врха стека
return stack[top];
}

4. Испечатавање стека (display)

Ова операција исписује садржај стека од врха ка дну:

c
void display(void) {
int i;

// Проверавамо да ли је стек празан
if (top == -1) {
printf("Стек је празан!\n");
return;
}

// Испечатавамо садржај стека
printf("Садржај стека: ");
for (i = top; i >= 0; i--) {
printf("%d ", stack[i]);
}
printf("\n");
}

Пример програма

Следећи C програм демонстрира имплементацију стека помоћу низа:

c
#include <stdio.h>
#define MAX_SIZE 100

int stack[MAX_SIZE];
int top = -1; // Почетни врх стека је -1

int main() {
int choice, value;

while (1) {
printf("1. Пусх\n2. Поп\n3. Топ\n4. Испечатавање\n5. Излаз\n\n");
printf("Унесите избор: ");
scanf("%d", &choice);

switch (choice) {
case 1:
printf("Унесите вредност за пушење: ");
scanf("%d", &value);
push(value);
break;
case 2:
value = pop();
if (value == -1)
printf("Стек је празан!\n");
else
printf("Попујена вредност: %d\n", value);
break;
case 3:
value = top();
if (value == -1)
printf("Стек је празан!\n");
else
printf("Вредност на врху стека: %d\n", value);
break;
case 4:
display();
break;
case 5:
exit(0);
default:
printf("Невалидан избор!\n");
}
}

return 0;
}

Закључак

Имплементација стека у C програмирању користећи низ је ефикасна и једноставна. Стек омогућава LIFO приступ елементима, што је корисно у разним ситуацијама у програмирању. Операције стека, као што су пуш, поп, топ и исписивање, лако се имплементирају користећи показивач на врх стека. Имплементација стека помоћу листе је такође могућа и може се истражити за веће и сложеније структуре података.

Честа питања (FAQ)

1. Шта је стек у C програмирању?

Стек је линеарна структура података која следи принцип LIFO (Last In First Out).

2. Како се имплементира стек у C програмирању?

Стек се може имплементирати у C програмирању користећи низ или листу.

3. Које су операције повезане са стеком?

Основне операције стека укључују пуш (убацивање елемента), поп (уклањање елемента), топ (враћање елемента са врха) и исписивање (исписивање садржаја стека).

4. Како проверити да ли је стек пун?

Проверавамо да ли је показивач на врх стека већи или једнак максималној величини стека.

5. Како проверити да ли је стек празан?

Проверавамо да ли је показивач на врх стека мање од нуле.

6. Како убацити елемент у стек?

Користимо пуш операцију и увећавамо показивач на врх стека за један.

7. Како уклонити елемент са стека?

Користимо поп операцију и смањујемо показивач на врх стека за један.

8. Како вратити елемент са врха стека?

Користимо топ операцију која враћа вредност са врха стека.

9. Како исписати садржај стека?

Итерирамо кроз стек од врха ка дну користећи показивач на врх стека.

10. Које су примене стека у програмирању?

Стекови се користе у балансирању заграда, обради израза, рекурзивним алгоритмима и другим ситуацијама где се мора следити LIFO принцип.