[データ構造]スタック


🌟 スタックスタック



コンセプト:


制限概念を持つ線形構造で、すべてのデータの挿入と削除は一端でのみ行われます.

機能:


後入先出
トップポインタトップポインタ

エラーが発生した条件:


あふれ飽和状態
底流-空白

スタックの実装📚

#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.