728x90
반응형
아래는 C 언어로 구현한 스택 예제입니다.
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100 // 스택의 최대 크기를 정의합니다.
typedef struct {
int stack[MAX_STACK_SIZE]; // 스택을 배열로 구현합니다.
int top; // 스택의 가장 위에 있는 데이터의 인덱스를 저장하는 변수입니다.
} Stack;
// 스택 초기화 함수입니다.
void init_stack(Stack *s) {
s->top = -1; // 가장 위에 있는 데이터의 인덱스를 -1로 초기화합니다.
}
// 스택이 꽉 차 있는지 확인하는 함수입니다.
int is_full(Stack *s) {
return s->top == MAX_STACK_SIZE - 1; // 스택이 꽉 차 있다면 1을 반환합니다. 아니라면 0을 반환합니다.
}
// 스택이 비어 있는지 확인하는 함수입니다.
int is_empty(Stack *s) {
return s->top == -1; // 스택이 비어 있다면 1을 반환합니다. 아니라면 0을 반환합니다.
}
// 스택에 데이터를 추가하는 함수입니다.
void push(Stack *s, int item) {
if (is_full(s)) { // 스택이 꽉 차 있다면
printf("Error: Stack is full\n"); // 오류 메시지를 출력합니다.
return;
}
s->top++; // 스택의 가장 위에 있는 데이터의 인덱스를 증가시킵니다.
s->stack[s->top] = item; // 스택에 데이터를 추가합니다.
}
// 스택에서 데이터를 삭제하고 반환하는 함수입니다.
int pop(Stack *s) {
if (is_empty(s)) { // 스택이 비어 있다면
printf("Error: Stack is empty\n"); // 오류 메시지를 출력합니다.
return -1; // -1을 반환합니다.
}
int item = s->stack[s->top]; // 스택의 가장 위에 있는 데이터를 item 변수에 저장합니다.
s->top--; // 스택의 가장 위에 있는 데이터의 인덱스를 감소시킵니다.
return item; // 저장된 데이터를 반환합니다.
}
int main() {
Stack s;
init_stack(&s); // 스택을 초기화합니다.
push(&s, 1); // 스택에 1을 추가합니다.
push(&s, 2); // 스택에 2를 추가합니다.
push(&s, 3); // 스택에 3을 추가합니다.
while (!is_empty(&s)) { // 스택이 비어 있지 않다면
int item = pop(&s); // 스택에서 데이터를 삭제하고 반환합니다.
printf("%d ", item); // 반환된 데이터를 출력합니다.
}
return 0; // 프로그램을 종료합니다.
}
이 코드는 기본적인 스택의 연산들(push, pop, is_full, is_empty)을 구현하고 있습니다. 스택의 크기는 `MAX_STACK_SIZE`로 정의되어 있으며, 스택은 `Stack` 구조체로 표현됩니다. `init_stack()` 함수를 사용하여 스택을 초기화하고, `push()` 함수를 사용하여 스택에 새로운 요소를 추가할 수 있습니다. 마찬가지로, `pop()` 함수를 사용하여 스택에서 가장 위에 있는 요소를 제거하고 반환할 수 있습니다. `is_full()` 함수와 `is_empty()` 함수를 사용하여 스택이 가득 차있는지, 혹은 비어있는지를 확인할 수 있습니다.
위 예제 코드는 스택에 1, 2, 3을 차례로 추가한 뒤, `pop()` 함수를 반복적으로 호출하여 스택의 모든 요소를 출력합니다. 출력 결과는 다음과 같습니다.
```
3 2 1
```
728x90
반응형
'CS > 자료구조' 카테고리의 다른 글
자료구조 C언어 데크(Deque, Double-ended Queue) 예제 (0) | 2023.05.04 |
---|---|
자료구조 C언어 큐(Queue) 예제 (0) | 2023.05.04 |
C언어 자료구조 연결리스트로 구현된 스택의 삽입/삭제 (0) | 2023.05.03 |
C언어 자료구조 배열로 구현된 스택의 삽입/삭제 (0) | 2023.05.03 |