push( ) 와 pop( ) 함수를 이용한 스택 - C 언어

2021. 4. 22. 21:49·C
728x90
반응형

스택의 개념과 구조

: 스택은 마지막에 삽입한 원소는 맨 위에 쌓여 있다가 가장 먼저 삭제 됨 / 후입선출 구조 ( LIFO, Last-In-First-Out )

스택에서의 삽입 연산 : push

스택에서의 삭제 연산 : pop

 

기본 설정 

#include <stdio.h>
#define STACK_SIZE 100
 
int S[STACK_SIZE];
int top=-1;
cs

 

100 크기의 S라는 정수형 배열을 만든다.

변수 top은 삽입과 삭제가 일어나는 위치로 현재 스택의 가장 위에 있는 데이터 위치이다.

새로운 데이터가 들어오면 배열의 첫번째인 S[0]에 들어오기 때문에 top의 위치는 0으로 바뀌어야 한다. 그렇기에 top의 초기값은 -1이다.

 

스택의 push( ) 알고리즘

 

: 스택 S에서 top이 마지막 자료를 가리키고 있으므로 그 위에 데이터를 삽입하려면 top의 위치를 하나 증가시킨다. 이 때 top 위치가 스택의 크기 ( =STACK_SIZE )보다 크면 오버플로우 상태이므로 연산이 종료된다. 오버플로우가 아니라면 스택의 top 위치에 데이터 삽입한다.

 

#include <stdio.h>
#define STACK_SIZE 100
 
int S[STACK_SIZE];
int top=-1;
 
int push(int num){
  if(top == STACK_SIZE-1 ) { 
    printf("error!");
    return 0;
    }
 
  S[++top] = num;
  return 1;
 
}
cs

 

먼저 if문으로 오버플로우를 확인한다. 변수 top이 스택 사이즈-1과 동일하다면 스택이 꽉 찬 것이니 에러 메세지를 출력하고 종료한다.

그렇지 않다면 S[++top]으로 top에는 제일 위에 있는 원소의 위치가 들어가고 그 위치에 새 데이터가 삽입되게 된다.

 

스택의 pop( ) 알고리즘

: 공백 스택이 아니면 top에 있는 원소를 삭제하고 반환한다. 스택의 마지막 원소가 삭제되면 그 아래 원소, 즉 남아있는 원소 중 가장 위에 있는 원소가 top이 되어야 하므로 top 위치를 하나 감소시킨다.

 

#include <stdio.h>
#define STACK_SIZE 100
 
int S[STACK_SIZE];
int top=-1;
 
int pop() {
  if(top==-1) { 
    printf("error"); 
    return 0;
    }
 
  return S[top--];
}
cs

 

먼저 if문으로 top = -1이면 스택이 공백이라는 뜻이므로 에러 메세지를 출력하고 종료한다.

그렇지 않다면 S[top--]로 top위치의 원소를 반환하고 top의 위치를 그 아래 위치로 바꾼다. (후위 감소 연산자의 원리 이용)

 

 

참조 : C로 배우는 쉬운 자료구조 / 이지영 / 한빛아카데미

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'C' 카테고리의 다른 글

연결리스트를 이용한 큐의 구현 | 연결큐 - C 언어  (0) 2021.05.27
enQueue( )와 deQueue( ) 함수를 이용한 원형큐 - C 언어  (0) 2021.05.26
선형 리스트 삽입/삭제/탐색/종료 - C 언어  (0) 2021.04.16
연결리스트(Linked list) 노드 삭제 - C 언어  (0) 2021.04.09
연결리스트(Linked list) 노드 삽입 - C 언어  (0) 2021.04.09
'C' 카테고리의 다른 글
  • 연결리스트를 이용한 큐의 구현 | 연결큐 - C 언어
  • enQueue( )와 deQueue( ) 함수를 이용한 원형큐 - C 언어
  • 선형 리스트 삽입/삭제/탐색/종료 - C 언어
  • 연결리스트(Linked list) 노드 삭제 - C 언어
waVwe
waVwe
    반응형
  • waVwe
    waVwe 개발 블로그
    waVwe
  • 전체
    오늘
    어제
    • ALL (184)
      • Python (1)
      • Spring (15)
      • DevOps (10)
      • Git (6)
      • JAVA (4)
      • C (22)
      • 코테 문제 풀이 (124)
        • 프로그래머스 (43)
        • 백준 (2)
        • 정올 (64)
        • SW Expert Academy (1)
        • 온코더 oncoder (14)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 🐙 Github
  • 공지사항

  • 인기 글

  • 태그

    progate
    while문
    이진트리
    코테
    내일배움캠프
    devops
    온코더
    Til
    C언어
    docker
    자료구조
    프로그래머스
    도커
    알고리즘
    스파르타코딩클럽
    자바
    MSA
    깃
    CI/CD
    springboot
    java
    깃헙
    스프링부트
    스파르타코딩
    C
    아파치카프카
    연결리스트
    형변환
    정올
    스프링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
waVwe
push( ) 와 pop( ) 함수를 이용한 스택 - C 언어
상단으로

티스토리툴바