알고리즘, 자료구조/개념정리

[C][강의요약] 스택의 구현 (2)

soohkang 2022. 7. 11. 12:19
728x90

https://youtu.be/Vj_JOmL1nyE

 

배열을 이용한 구현

// 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개 이상 필요할 때?

* 서로 다른 타입의 데이터를 저장할 스택이 필요할 때?