본문 바로가기
자료구조

Stack - C와 파이썬 비교(1)

by winston1214 2020. 7. 3.
반응형

스택은 자료구조의 기본이라고 할 수 있다. 스택의 특징은 후입선출(LIFO)이다. 즉, 마지막에 들어간 것이 처음에 나온다고 생각하면 된다. 스택의 말 뜻처럼 쌓는다고 생각하면 편하다.

예를 들어 밑넓이는 좁고 높이가 긴 직육면체의 상자가 있다 생각해보자. 여기에 물건을 넣었을 때 맨 밑의 물건을 꺼내기 위해선 안에 있는 모든 물건을 빼야한다. 스택은 이런 것이다. 자세한 것은 밑의 링크를 참조하면 된다.

https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%9D

 

스택 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다. 끝먼저내기 목록(Pushdown list)이라고도 한다. 스택은

ko.wikipedia.org

 

스택을 C로 구현했을 때 코드를 한 번 봐보자.

#include <stdio.h>
#include <stdlib.h>

#define MAX_STACK_SIZE 100
typedef int element;
element stack[MAX_STACK_SIZE];
int top = -1;

int is_empty() {
	return (top == -1);
}

int is_full() {
	return (top == (MAX_STACK_SIZE - 1));
}

void push(element item) {
	if (is_full()) {
		fprintf(stderr, "스택 포화 에러\n");
		return;
	}
	else stack[++top] = item;
}

element pop() {
	if (is_empty()) {
		fprintf(stderr, "스택 공백 에러\n");
		exit(1);
	}
	else return stack[top--];
}
int main(void) {
	push(1);
	push(2);
	push(3);
	printf("%d\n", pop());
	printf("%d\n", pop());
	printf("%d\n", pop());
	return 0;
}

C는 동적할당이 아닌 이상 스택이라는 담는 상자의 크기를 정해줘야한다. 그리고 top의 초기값을 -1로 하여 비어있다는 상태를 정의한다. main을 실행시키면 

C로 구현한 스택

위와 같은 결과가 나온다. 먼저 들어간(push)숫자가 가장 밑에 있음을 보여준다.

반면에 파이썬은 어떨까?

class Stack:
    def __init__(self):
        self.top=[]
    def isEmpty(self):return len(self.top) == 0
    def size(self): return len(self.top)
    def clear(self): self.top=[]
    def push(self,item): # 삽입
        self.top.append(item)
    def pop(self): # 삭제(마지막 부분)
        if not self.isEmpty():
            return self.top.pop(-1)
    def peek(self): # 맨 위의 항목을 반환
        if not self.isEmpty():
            return self.top[-1]

C에 비해 정의하는 함수의 길이도 짧고 직관적으로 바로 이해할 수 있다.

다음 장에는 stack의 활용 부분으로 C와 Python의 비교를 해보겠다.

반응형

'자료구조' 카테고리의 다른 글

Linked List - C와 Python 비교 - 개념  (1) 2020.07.15
queue - 3  (0) 2020.07.15
Queue - C와 Python 비교 - 2  (0) 2020.07.13
Queue - C와 Python 비교  (0) 2020.07.13
Stack - C와 Python 비교(2)  (0) 2020.07.03

댓글