[Data Structure] 스택 Stack

KingU·2021년 12월 7일
0

Data Structure

목록 보기
2/5
post-thumbnail

🌟 스택 Stack



개념:

모든 자료의 삽입과 삭제가 한쪽 끝에서만 수행되는 제한적 개념의 선형구조



특징:

후입선출 Last In First Out
톱 포인터 Top Pointer



오류 발생 조건:

오버플로 - 포화상태

언더플로 - 공백상태





스택의 구현 📚

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

#define STACK_SIZE 10
typedef int ELEMENT; //int 대신에 ELEMENT를 써서 스택 쓰기.
typedef struct Stack{
   ELEMENT buf[STACK_SIZE];
   int top;
}STACK; //구조체 만들기.

void createStack( STACK *s );
int isFull( STACK *s );  //오버일 때
int isEmpty( STACK *s );  //공백일 때
void Push( STACK *s, ELEMENT data );  //원소 삽입
ELEMENT Pop( STACK *s );  //반환

int main(){
   int menu;
   ELEMENT data ;
   STACK stack;
   
   createStack( &stack );
   do{
      printf("1:push, 2:pop, 0:exit : ");
      scanf("%d", &menu);
      switch( menu ){
         case 1 :
            printf("데이터 입력 : ");
            scanf("%d", &data);
            Push( &stack, data );
            break;
         case 2 :
        data = Pop(&stack);
        if( data )
              printf("pop 데이터 : %d\n", data);
            break;
      case 0 :
        break;
         default :
            printf("잘못된 입력 입니다. \n");
            break;
      }
   }while( menu );
}

void createStack( STACK *s ){  // top 포인터를 -1로 초기화
   s->top=-1;
}
int isFull( STACK *s ){   // 스택이 가득 차 있으면 true 리턴;
   return s->top+1==STACK_SIZE;
   
}
int isEmpty( STACK *s ){   // 스택이 비어 있으면 true 리턴
   return s->top==-1;

}
void Push( STACK *s, ELEMENT data ){ //스택이 가득 차 있으면 문구 출력 후 리턴, 아니면 push
   if(isFull(s)){
      printf("stack is full\n");
      return;
   }
   s->buf[++(s->top)] = data;
   
}
int Pop( STACK *s ){  //스택이 비어  있으면 문구 출력 후 0 리턴, 아니면 맨 위 데이터 리턴
   if(isEmpty(s)){
      printf("stack is empty\n");
      return 0;
   }
   return s->buf[(s->top)--];
}




당신의 시간이 헛되지 않는 글이 되겠습니다.
I'll write something that won't waste your time.

profile
원하는 것을 창조하고 창조한 것을 의미있게 사용하자

0개의 댓글

관련 채용 정보