스택 - C

Shawn Kang·2020년 12월 25일
0

자료구조

목록 보기
1/5

개요

스택(Stack)은 톱(Top)이라 불리는 한쪽 끝에서 모든 입력, 출력이 이루어지는 순서 리스트입니다. 먼저 들어간 데이터가 가장 나중에 나오기 때문에, 후입선출(LIFO, Last In First Out) 리스트라고도 합니다.

추상 자료형

구조

  • 스택 (Stack)
    - Elements : 스택에 저장될 데이터의 배열.
    - Top : 스택 최상단의 위치, 스택에 저장된 데이터의 개수.

기능

  1. Pop(Stack) : 스택 최상단의 데이터를 제거하고 이를 반환함.
  2. Push(Stack, Element) : 스택 최상단에 데이터를 추가함.
  3. IsEmpty(Stack) : 스택이 비어있을 경우, true를 반환함. 아닐 경우, false를 반환함.
  4. IsFull(Stack) : 스택이 가득 찼을 경우, true를 반환함. 아닐 경우, false를 반환함.
  5. Peek(Stack) : 스택 최상단의 데이터를 반환함.
  6. Init(Stack) : 스택을 초기화함.
  7. Error(Error Code) : 오류 발생 시 원인을 출력하고 프로그램을 종료함.

구현

구조

typedef struct IntStack* IntStackP;
typedef struct IntStack{
    int Elements[100];
    int Top;
} IntStack;

기능

int Pop(IntStackP Stack) {
    if (IsEmpty(Stack) == True)
        Error(1);
    return Stack->Elements[(Stack->Top)--];        
}

void Push(IntStackP Stack, int Element) {
    if (IsFull(Stack) == True)
        Error(0);
    Stack->Elements[(Stack->Top)++] = Element;
}

int IsEmpty(IntStackP Stack) {
    return Stack->Top == -1? True : False;
}

int IsFull(IntStackP Stack) {
    return Stack->Top == 100? True : False;
}

int Peek(IntStackP Stack) {
    if (IsEmpty(Stack) == True)
        Error(1);
    return Stack->Elements[Stack->Top];
}

IntStackP Init() {
    IntStackP Temp;
    Temp = malloc(sizeof(IntStack));
    Temp->Top = -1;
    return Temp;
}

void Error(int Code) {
    char* ErrCause[3] = { "스택이 꽉 참", "스택이 비어 있음", "기타 오류" };
    printf("다음과 같은 오류가 발생하여 프로그램을 종료합니다: %s", ErrCause[Code]);
    exit(-1);
}
profile
i meant to be

0개의 댓글