728x90
배열을 이용한 구현
// stack.c
#include "stack.h" // push, pop 등 함수들의 프로토 타입만 모은 헤더 파일 만들기.
#define MAX_CAPACITY 100
// stack이라는 이름의 스택을 구현
// 스택에 저장되는 데이터의 타입을 문자(char)라고 가정하자.
char stack[MAX_CAPACITY];
int top = -1;
void push(char ch)
{
// 스택이 가득차면 더이상 push 할 수 없다.
if (if_full())
return;
top++;
stack[top] = ch;
}
char pop()
{
char tmp = stack[top];
top--;
return tmp;
}
// peek을 호출하기 전에 먼저 empty인지 검사해야 한다.
char peek()
{
return stack[top];
}
int is_empty()
{
return top == -1;
}
int is_full()
{
return top == MAX_CAPACITY - 1;
}
연결리스트로 구현
struct node
{
char *data; // 문자열들을 저장하는 스택이라고 가정.
struct node *next;
};
typedef struct node Node;
Node *top = NULL;
void push(char *item)
{
Node *p = (Node *)malloc(sizeof(Node));
p->data = item;
p->next = top;
top = p;
}
char *pop()
{
if (is_empty())
return NULL;
char *result = top->data;
top = top->next;
return result;
}
char *peek()
{
if (is_empty())
return NULL;
return top->data;
}
int is_empty()
{
return top == NULL;
}
위 코드에서 문제점
* 스택이 2개 이상 필요할 때?
* 서로 다른 타입의 데이터를 저장할 스택이 필요할 때?
'알고리즘, 자료구조 > 개념정리' 카테고리의 다른 글
[C][강의정리] 연결 리스트 개념과 기본 동작들 (1) (0) | 2022.07.12 |
---|---|
[C][강의요약] 스택의 구현 (3) (0) | 2022.07.11 |
[C][강의요약] 스택의 개념과 구현 (1) (0) | 2022.07.11 |
[알고리즘][자료구조] 큐 (0) | 2020.07.31 |
[알고리즘][빅오] 빅오표기법 (0) | 2020.07.10 |